windows下製作PHP擴充套件

2021-09-08 18:32:28 字數 3251 閱讀 9247

**:

編譯php擴充套件必需的一些標頭檔案需要從php原始碼中獲取,其中有一些配置性的標頭檔案,需要做到下面第8步之後,也就是說php伺服器程式可以使用別人已經編譯好的安裝包。

最近在學習編寫php拓展,懶得裝linux,就研究了一下在windows下編譯php的方法,總算搭建好了在windows下開發php拓展的環境。

1、在c盤新建乙個資料夾,c:/phpdev

4、獲取編譯好的bison.exe和flex.exe,儲存到桌面或者其他c:/phpdev以外的地方。分別開啟壓縮包並進入bin資料夾,將bison.exe和flex.exe複製到c:/windows資料夾

5、假定你已經安裝了visual studio 2008(我個人不推薦用visual studio 2008,推薦使用platform sdk febrary 2003,官方的編譯版本就是用這個psdk編譯的,但是這裡用visual studio 2008做說明),開始選單->microsoft visual studio 2008->visual studio tools->visual studio 2008 command prompt,開啟visual studio 2008命令提示行

6、用cd命令將目錄切換到c:/phpdev/php-5.2.14

7、輸入buildconf.bat,回車。這個批處理的作用是搜尋所有的.w32檔案並為你建立configure.js

8、輸入下面的命令

cscript /nologo configure.js –without-xml –without-wddx –without-******xml –without-dom –without-libxml –disable-zlib — without-sqlite –disable-odbc –disable-cgi –enable-cli –enable-debug –without-iconv –disable-ipv6

9、輸入nmake,回車

10、第9步中可能會出現檔案的編碼錯誤,找到出現錯誤的檔案,用editplus選擇western european (windows)編碼開啟後另存為utf-8編碼,重寫nmake即可

11、編譯好以後切換到c:/phpdev/php-5.2.6/debug_ts,測試一下

php -r "echo 『hello,world』;"

**:第一步:準備

1、php原始碼包和windows下的二進位製包,以及安裝visual c++,並把microsoft visual studio/common/msdev98/bin的絕對路徑新增到windows環境變數

2、解壓原始碼包到d:/php_src

3、進入d:/php_src/ext目錄,複製skeleton資料夾,並重命名為要開發擴充套件的名字,本例為「linvo」

4、把二進位製包中dev目錄下的php5ts.lib檔案,拷入新建的linvo目錄

5、編輯linvo目錄中的php_skeleton.h、skeleton.c、skeleton.dsp這三個檔案,替換內容中所有extname為linvo,extname為linvo。(嚴格區分大小寫)

第二步:編碼

6、編輯php_skeleton.**件(標頭檔案)

在php_function(confirm_linvo_compiled);下面編寫

php_function(hello);

宣告乙個hello函式

7、編輯skeleton.c檔案(主檔案)

在php_fe(confirm_linvo_compiled, null) 下面編寫

php_fe(hello, null)

這是函式入口,下面該寫函式主體了

找到php_function(confirm_test_compiled)函式,該函式是測試函式,在該函式後面新寫乙個函式

php_function(hello)

char *arg = null;

int arg_len, len;

char *strg;

/* 接收引數 */

if (zend_parse_parameters(zend_num_args() tsrmls_cc, "s", &arg, &arg_len) == failure) {

return;

len = spprintf(&strg, 0, "hello,%s", arg);

return_stringl(strg, len, 0);

第三步:編譯

8、執行cmd命令列,進入d:/php_src/ext/linvo目錄

9、輸入 msdev linvo.dsp /make "linvo - win32 release_ts"

10、如果沒有錯誤,則在php_src目錄下會生成乙個release_ts資料夾,裡面就是編譯好的php_linvo.dll擴充套件

第四步:使用

11、將其拷入執行環境中的php擴充套件目錄ext

12、編輯php.ini新增extension=php_linvo.dll,重啟apache

13、在php檔案中執行如下語句 

echo hello('linvo');

將輸出hello,linvo

14、通過echo phpinfo();也可看到擴充套件已載入的資訊

linvo

linvo support enabled

當生成的擴充套件放到資料夾中,並且修改了php.ini之後有可能出現生成的擴充套件dll並沒有被php載入,可以從以下幾個方面進行檢查。

1、建立乙個php,並且使用phpinfo()函式打出當前php資訊,找到php中真實載入的php.ini。

2、是否已經重啟過apache。

3、檢視apache的錯誤日誌,看出現的有沒有關於載入擴充套件出錯的一些資訊。 如果出現「php warning:  php startup: extname: unable to initialize module/nmodule compiled with module api=20090626, debug=0, thread-safety=1/nphp    compiled with module api=20060613, debug=0, thread-safety=1/nthese options need to match/n in unknown on line 0」這樣的提示,說明編譯時使用原始碼版本與php的應用程式不符合(並未要求完全一致的版本) ,如果出現不符合。

4、寫擴充套件時是否引用了其它dll,對於此種問題原因,詳見:

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安裝redis擴充套件

1 安裝redis,看這篇windows下安裝redis 再來是php redis 最後把這兩個解壓,分別把裡面的php redis.dll php igbinary.dll 複製出來放到你的php安裝目錄如下 4 修改對應的php.ini 隨意位置新增 extension php igbinary...