在Windows下寫PHP的C擴充套件

2021-05-01 08:34:32 字數 2066 閱讀 7016

安裝好如下軟體:

引用1. vc++ 6

2. php二進位制環境

3. cygwin.

如果你的cygwin沒有安裝在c:/cygwin,進入php原始碼包/ext目錄下,修改ext_skel_win32.php :

$cygwin_path = 'c:/cygwin/bin';

修改為你的cygwin目錄

$cygwin_path = 'd:/cygwin/bin';

命令列方式進入ext目錄然後執行:

php ext_skel_win32.php –extname=myhello

(當然,為了保證上面的命令列能正常執行,首先你得確保你的php目錄在系統的環境變數裡)

執行該命令後,有人發現下面的錯誤

引用warning: fopen(myhello/myhello.dsp): failed to open stream: no such file or directory in d:/cygwin/php-5.2.6/ext/ext_skel_win32.php on line 45

warning: fopen(myhello/myhello.php): failed to open stream: no such file or directory in d:/cygwin/php-5.2.6/ext/ext_skel_win32.php on line 52

說明你的 cygwin 安裝不完整。要是沒報錯你的myhello擴充套件就建立成功了。這就是乙個簡單的擴充套件框架,用純c語言編寫。

iii. 新增依賴的php5ts.lib

在php的二進位製包中的 dev目錄下將 php5ts.lib 拷到我們的myhello目錄中, 否則編譯將通不過。

iv. 新增hello c**

1. 修改php_myhello.h

擴充套件的新函式: 在php_function(confirm_myhello_compiled); 行後新增一行

c**

php_function(confirm_myhello_compiled);   

php_function(myhello);  // 新增的行

php_function(confirm_myhello_compiled);

php_function(myhello); // 新增的行

2. 修改myhello.c

在php_function(confirm_myhello_compiled) 後新增我們的新函式

c**

php_function(myhello)  

php_function(myhello)

在陣列zend_function_entry myhello_functions增加一行

c**

zend_function_entry myhello_functions =     /* must be the last line in myhello_functions */

};  

zend_function_entry myhello_functions =     /* must be the last line in myhello_functions */

};

v. 構建dll檔案引用

msdev myhello/myhello.dsp /make "myhello - win32 release_ts"

vi. 整合dll到php中。

1. 把我們生成的 php_myhello.dll放到二進位制php環境的ext目錄下.

2. 然後修改php.ini, 新增 extension=php_myhello.dll 重啟apahce。

3. 新建c_test.php 內容為

<?php myhello(); ?>   

<?php myhello(); ?>

在瀏覽器裡開啟會看到頁面:

在Windows下寫PHP的C擴充套件

安裝好如下軟體 quote 1.vc 6 2.php二進位制環境 3.cygwin.quote ext skel是建立擴充套件的shell,在windows上無法執行,所以就必須要有cygwin。color red b ii.建立php擴充套件骨架目錄檔案 b color 如果你的cygwin沒有安...

在Windows下原始碼編譯PHP

最近在學習編寫php拓展,懶得裝linux,就研究了一下在windows下編譯php的方法,總算搭建好了在windows下開發php拓展的環境。1 在c盤新建乙個資料夾,c phpdev 4 獲取編譯好的bison.exe和flex.exe,儲存到桌面或者其他c phpdev以外的地方。分別開啟壓縮...

C 在windows下的異常處理

專案大了 多了以後難免會出些問題導致程式崩潰,為了快速定位崩潰的位址與原因,引入了setunhandledexceptionfilter這個api。久了後發現這個api有些情況下無法work,異常會被其他異常處理接管。這樣就無法定位到自己的崩潰原因。後面查了下,大致是在新的msvcr.dll中會接管...