其中php二進位製包分為vc6、vc8、vc9及ts和nts版本。
vc6、vc8、vc9分別對應vc6、vc2005、vc2008
ts表示(thread safe),當以isapi(iis server)允許時,因為是單程序中執行多執行緒,為避免記憶體洩漏和共享變數安全,建議使用ts版本。
當以fast_cgi等以單一程序來執行,這樣就無需進行執行緒的安全檢查。
下面的配置基礎,以f:\php_stdio資料夾為基礎
f:\php_stdio\php-sdk目錄下。注意,解壓後,這個目錄下應該有bin和script子目錄。
開乙個cmd視窗,切換到f:\php_stdio\php-sdk目錄下,執行vcvarsall.bat來設定好編譯環境變數。
vs2008安裝路徑\vc\vcvarsall.bat這裡vcvarsall.bat的具體目錄要根據你自己的安裝位置而定。
接著,進入在cmd視窗裡繼續執行以下命令:
bin\phpsdk_setvars.bat這樣,在f:\php_stdio\php-sdk目錄下又多了乙個php54dev目錄。bin\phpsdk_buildtree.bat php54dev
接著繼續將deps解壓到
f:\php_stdio\php-sdk\php54dev\vc9\x86\目錄下。原來這個目錄下的deps目錄下的所有子目錄均是空目錄,解壓後,應該複製進很多必要的模組/擴充套件所需的庫檔案。
接下來,將php-5.4.5原始碼目錄複製乙份到
f:\php_stdio\php-sdk\php54dev\vc9\x86\目錄下。進入php原始碼目錄
cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5執行
buildconf然後就可以先試著編譯php了。最開始,一般編譯盡可能少的模組,先讓核心能正常編譯出來:
configure --disable-all --enable-cli這一步的主要目的是生成config.w32.h,如果需要生成php,可以繼續執行
nmake clean; nmake
php5.4最核心部分及乙個命令列工具就編譯出來了。nmake clean是為了避免遺留編譯中間結果檔案帶來干擾。
php擴充套件的基礎結構相同,為方便開發php提供了ext_skel和ext_skel_win32.php分別是linux、windows下的擴充套件骨架搭建工具。
此次講的是windows中搭建php擴充套件開發環境,所以使用的是ext_skel_win32.php。用它生成的新擴充套件骨架,可以直接用vs開啟。
上圖是ext_skel_win32.php支援的引數
常用的主要是--extname和--proto:
extname:指定擴充套件的名稱
proto:為了便於快速構建函式骨架,可以建立乙個檔案,並寫入各函式的定義。
出現上述執行結果,表示新擴充套件骨架生成成功,現在開啟f:\php_stdio\php-sdk
\php54dev\vc9\x86\php-5.4.5\ext可以看到my_fopen資料夾。進入my_fopen可以看到my_fopen.dsp,它就是vs的專案檔案。
現在可以開發你想要的擴充套件程式了。
目前新建的擴充套件中並未建立任何函式介面,但預設的擴充套件為我們提供了乙個測試的函式介面,
預設函式的命名規則是:confirm_[extname]_compiled
函式介面:tring confirm_[extname]_compiled(string)
1.用vs開啟my_fopen.dsp
2.設定專案屬性-》配置屬性-》c/c++-》**生成,設定執行庫:多執行緒 dll (/md)
3.設定專案屬性-》配置:切換到release_ts
4.設定專案屬性-》配置屬性-》c/c++-》高階,設定編譯為:編譯為 c ** (/tc)
5.設定專案屬性-》配置屬性-》鏈結器》常規,設定輸出檔案:release_ts/php_my_fopen.dll。
如果不設定,當編譯生成擴充套件後,找起來會比較麻煩。所以這項設定不是必須的。
6.設定專案屬性-》配置屬性-》鏈結器》常規,增加附加庫目錄:f:\php_work\php-5.4.5\dev
如果不設定此選項,編譯時會報:無法開啟輸入檔案「php5ts.lib」
7.最後按f5,執行編譯。會生成php_my_fopen.dll
成功1個,表示dll生成成功。
現在擴充套件已經編譯成功,接下來是在php中使用它。
8.拷貝php_my_fopen.dll至f:\php_work\php-5.4.5\ext下
8.開啟f:\php_work\php-5.4.5\php.ini,新增extension=ext/php_my_fopen.dll
9.新建f:\php_work\test.php
<?php
echo confirm_my_fopen_compiled("test");
1.fatal error c1902: 程式資料庫管理器不匹配;請檢查安裝
mspdbsrv.exe 或 mspdbcore.dll 丟失或者其版本和 mspdb80.dll 的版本不同,確定這三個檔案的相同版本安裝在系統裡。
在vc安裝目錄下的\common7\ide 目錄下拷貝這三個檔案到 安裝目錄下的vc\bin下即可
2. ../main/config.w32.h開啟失敗
php原始碼進行configure後才會產生config.w32.h
3.無法開啟輸入檔案「php5ts.lib」
windows下製作PHP擴充套件
編譯php擴充套件必需的一些標頭檔案需要從php原始碼中獲取,其中有一些配置性的標頭檔案,需要做到下面第8步之後,也就是說php伺服器程式可以使用別人已經編譯好的安裝包。最近在學習編寫php拓展,懶得裝linux,就研究了一下在windows下編譯php的方法,總算搭建好了在windows下開發ph...
Windows下的PHP擴充套件
本來想吐槽點什麼,算了,直接進入主題吧。安裝php並擴充套件。我使用的php版本是php 5.3.10 3 命令列就如c php 5.3.10,輸入buildconf.bat。4 輸入cscript nologo configure.js with php build win32build with...
windows下製作PHP擴充套件
編譯php擴充套件必需的一些標頭檔案需要從php原始碼中獲取,其中有一些配置性的標頭檔案,需要做到下面第8步之後,也就是說php伺服器程式可以使用別人已經編譯好的安裝包。最近在學習編寫php拓展,懶得裝linux,就研究了一下在windows下編譯php的方法,總算搭建好了在windows下開發ph...