windows10下編譯php擴充套件
在Windows上開發PHP擴充套件模組
雖然不怎麼用到windows下開發php擴充套件,但是有的時候有些人就是想安裝到windows下執行。沒有辦法,只能針對性的重新編譯。
這裡較全面的介紹如果在windows下編譯php擴充套件
一、開發環境搭建
1. Windows10 64位,
下載wampserver64位,https://www.wampserver.com/en/#wampserver-64-bits-php-5-6-25-php-7
在安裝wampserver64位時,儘量把相關的SDK安裝全了。尤其是Microsoft Visual C++ 2015-2022 Redistributable(x64)。這個東西到官網下載最快,不要到其他網站,很多垃圾。不安裝這些sdk,可能wampserver64起不來哦。
因為我用的是php7.2.34版本,所以還需要下載php7.2.34版本的原始碼。https://www.php.net/distributions/php-7.2.34.tar.gz
因為php-7.2.34使用VC15 x64編譯的,VC15對應的Visual Studio 2017。所以儘量對應的版本來編譯。
還需要下載Cygwin (http://www.cygwin.com)
Cygwin是在呼叫PHP擴充套件模組生成工具ext_skel_win32.php時使用,主要模擬一些unix的命令,否則該檔案中的一些程式碼是執行不通的哦。注意:安裝時提示選取映象站點下載模組時,選擇.cn結尾的站點速度最快。
安裝完成Cygwin之後(安裝路徑記為[Cygwin Path]),需要將[PHP Source]\ext\ext_skel_win32.php檔案中的$cygwin_path設定為[Cygwin]\bin目錄路徑。
這裡有很多坑,但是一些環境必要的外掛要勾選。具體參考一下這篇文章https://blog.csdn.net/u010356768/article/details/90756742。如果有額外你需要用的,自己追加啊。
最終會在桌面生成一個Cygwin64 Terminal的快捷方式。
cygwin 安裝路徑c:\cygwin64,根據你實際安裝的來替換。
“PHP原始檔目錄/ext/ext_skel_win32.php”,在這裡就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的
cygwin路徑。$cygwin_path = 'c:\cygwin64\bin';
把$cygwin_path修改為你實際安裝cygwin的路徑,這樣在下一步生成擴充套件的時候就不太會出錯了。
二、生成擴充套件
先把php.exe追加到作業系統的環境變數裡。例如:
再開啟cmd命令,進入[PHP Source]\ext\目錄,執行php ext_skel_win32.php --extname=foo,最終在[PHP Source]\ext\目錄下會生成一個foo目錄,擴充套件外掛樣例程式碼生成成功。
然後用VS2017在foo目錄建立一個工程,並做一些配置:具體參考:https://www.cnblogs.com/taotaodmw/p/14206707.html。該步驟要注意,我們是php7.2.34,需要把php7ts.lib配置到vs2017裡。
但是這裡需要選擇Windows SDK版本為10,如果選擇其他版本,有可能編譯的時候說找不到xxx.h檔案。
正常這樣下來,foo.dll是會在[PHP Source]\ext\foo\x64\release下生成了。
最後把這個foo.dll複製一份到
把foo.dll拷到C:\wamp64\bin\php\php7.2.34\ext目錄下,修改名稱為php_foo.dll,這樣在php.ini(注意是appache裡的php.ini連結,參考:C:\wamp64\bin\apache\apache2.4.51\bin\php.ini。不改這個重啟也無用)里加上一行extension=foo就可以了。因為配置檔案是按照這樣的格式識別的:extension='php_<ext>.dll
重啟一下apache,檢視phpinfo();,會發現我們的PHP擴充套件foo()已經載入進來,已經可以使用這個foo擴充套件了。