安裝好如下軟體:
引用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中會接管...