在Windows下寫PHP的C擴充套件

2021-08-29 19:46:39 字數 2383 閱讀 9075

安裝好如下軟體:

[quote]

1. vc++ 6

2. php二進位制環境

3. cygwin.

[/quote]

ext_skel是建立擴充套件的shell,在windows上無法執行,所以就必須要有cygwin。

[color=red][b]ii. 建立php擴充套件骨架目錄檔案[/b][/color]

如果你的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目錄在系統的環境變數裡)

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

[quote]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

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

[b][color=red]iii. 新增依賴的php5ts.lib[/color][/b]

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

[color=red][b]iv. 新增hello c**[/b][/color]

生成的myhello目錄中有關鍵檔案包括

myhello.dsp,

myhello.c,

php_myhello.h,

其他檔案暫時不必關心.

1. 修改php_myhello.h

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

php_function(confirm_myhello_compiled);

php_function(myhello); // 新增的行

2. 修改myhello.c

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

php_function(myhello)

在陣列zend_function_entry myhello_functions增加一行

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

};

[color=red][b]v. 構建dll檔案[/b][/color]

用vc6開啟我們的工程,就是myhello.dsp

1. 修改編譯方式為release: 選擇build->set active configuration設定預設編譯方式為release, 否則會提示缺少php5ts_debug.lib ,其實就是php5ts.lib。

2. 按f5編譯。會在ext上級的release_ts目錄下生成php_myhello.dll

[quote]

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

[/quote]

[color=red][b]vi. 整合dll到php中。[/b][/color]

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

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

3. 新建c_test.php 內容為

<?php myhello(); ?>

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

[quote] hello c extension.

[/quote]

在Windows下寫PHP的C擴充套件

安裝好如下軟體 引用1.vc 6 2.php二進位制環境 3.cygwin.如果你的cygwin沒有安裝在c cygwin,進入php原始碼包 ext目錄下,修改ext skel win32.php cygwin path c cygwin bin 修改為你的cygwin目錄 cygwin path...

在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中會接管...