使用C語言來擴充套件PHP,寫PHP擴充套件dll

2021-09-12 06:53:54 字數 1689 閱讀 9828

**

以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法:

3、把vc++ 6.0安裝目錄中的 microsoft visual studio\common\msdev98\bin 絕對路徑新增到系統環境變數中。

4、進入e:\php-5.2.17\ext目錄,複製skeleton資料夾,並重命名為要開發擴充套件的名字,本例為「myfun」。

5、重新命名skeleton.c為myfun.c,skeleton.dsp為myfun.dsp

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

下面就進入到編碼階段:

7、開啟php_skeleton.**件(標頭檔案),找到php_function(confirm_myfun_compiled);,在 php_function(confirm_myfun_compiled);,下面編寫php_function(mb_messagebox);,聲 明乙個mb_messagebox函式,此函式的作用僅是輸出js彈出乙個alert訊息框,用於測試。

8、下面定義函式入口,開啟myfun.c檔案,找到php_fe(confirm_myfun_compiled,null) ;,在下面編寫 php_fe(mb_messagebox,null),此處注意一下,php_fe是定義的乙個巨集,所以後面不用加引號。

9、在myfun.c最後面編寫函式的實體部分:

php_function(mb_messagebox)

len = spprintf(&strg, 0, "",arg); //此處正是輸入的js**

return_stringl(strg, len, 0);

}

到這**書寫就完成了,下面開始編譯:

10、開始->執行,輸入cmd,開啟命令列視窗。

11、進入myfun的目錄,輸入 msdev myfun.dsp /make "myfun - win32 release_ts",回車編譯。

12、如果沒有錯誤,在e:\php-5.2.17下會生成乙個release_ts資料夾,在裡面就可以找到php_myfun.dll檔案。

至此擴充套件dll開發完成,下面在php中進行測試:

13、把php_myfun.dll複製到原php目錄中的ext資料夾內。

14、開啟php.ini檔案,新增當前dll的擴充套件 extension=php_myfun.dll

<?php 

echo mb_messagebox("測試php擴充套件dll by 馬犇");

?>

瀏覽即可看到效果,下面附圖四張:

新增擴充套件:

最終效果:

phpinfo中的擴充套件資訊:

使用C語言來擴充套件PHP,寫PHP擴充套件dll

以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...

用C語言寫PHP擴充套件

1 預定義 在home目錄,也可以其他任意目錄,寫乙個檔案,例如caleng module.def 內容是你希望定義的函式名以及引數 int a int x,int y string b string str,int n 2 到php原始碼目錄的ext目錄 cd usr local php 5.4....

用C語言寫PHP擴充套件

用c語言寫php擴充套件 1 預定義 在home目錄,也可以其他任意目錄,寫乙個檔案,例如caleng module.def 內容是你希望定義的函式名以及引數 int a int x,int y string b string str,int n 2 到php原始碼目錄的ext目錄 cd usr l...