Windows中搭建PHP擴充套件開發環境

2021-06-10 12:42:19 字數 3547 閱讀 2957

其中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

bin\phpsdk_buildtree.bat php54dev

這樣,在f:\php_stdio\php-sdk目錄下又多了乙個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...