一、cmd進入命令行模式,並進入php-5.6.20-src/ext源代碼的ext目錄下
輸入命令php ext_skel_win32.php --extname=HelloWord
,執行結果以下圖:php
執行後在ext目錄下多了HelloWord
文件夾服務器
文件夾中的HelloWord.dsp
是Viscual C++的工程文件函數
從php的安裝目錄中的dev文件夾下,找到php5ts.lib
,複製到建立的HelloWord擴展目錄下測試
用Vs2012打開HelloWord.dsp
工程文件,調試模式選擇Release
模式,ui
F5啓動調試,發生錯誤,提示以下:c:\php-5.6.20-src\zend\zend_config.w32.h(25): fatal error C1083: 沒法打開包括文件:「../main/config.w32.h」: No such file or directory
spa
說明main/config.w32.h
文件缺失,網上搜索了諸多辦法,均失效,或許是之前的版本有效,如今這裏提供正確的解決辦法:命令行
添加config.w32.h
文件
在php源代碼文件目錄裏搜索config.w32.h
,在C:\php-5.6.20-src\win32\build
文件夾裏找到config.w32.h.in
,將這個文件複製到C:\php-5.6.20-src\main
文件夾裏,去掉後面的.in
。
注意:爲了讓擴展能和php運行環境嚴格匹配,要根據你的php運行環境的編譯版本(php5.6.20是VC11編譯的),在config.w32.h
文件里加上:#define PHP_COMPILER_ID "VC11"
3d
此時再從新編譯,編譯成功,在php-5.6.20-src目錄下生成了Release_TS
目錄,裏面有生成的擴展文件php_HelloWord.dll
調試
此時咱們將php_HelloWord.dll
拷貝到C:/php/ext
目錄下,並設置php.ini文件增長extension=php_HelloWord.dll
,並重啓Apache服務器
此時咱們用phpinfo()
函數測試,發現已經成功安裝了php_HelloWord.dll擴展code
打開HelloWord.c文件
找到以下函數:
PHP_FUNCTION(confirm_HelloWord_compiled) { 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, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "HelloWord", arg); RETURN_STRINGL(strg, len, 0); }
在下面增長函數HelloPHP
PHP_FUNCTION(HelloPHP) { RETURN_STRING("Hello PHP Ext!", 1); }
找到以下代碼:
const zend_function_entry HelloWord_functions[] = { PHP_FE(confirm_HelloWord_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in HelloWord_functions[] */ };
並修改以下:
const zend_function_entry HelloWord_functions[] = { PHP_FE(confirm_HelloWord_compiled, NULL) /* For testing, remove later. */ PHP_FE(HelloPHP, NULL) PHP_FE_END /* Must be the last line in HelloWord_functions[] */ };
從新編譯,生成php_HelloWord.dll
此時將php_HelloWord.dll複製到php/ext目錄下,咱們編寫測試php代碼以下:
<?php echo HelloPHP(); ?>
能夠看到執行結果:
自此第一個簡單的擴展開發完成!