新建目錄 php-ext
,將全部依賴工具解壓到此目錄,完成後目錄結構以下.php
php-ext --deps-5.5-vc11-x86 --deps --php-5.5.37-src --php-5.5.37-src --php-5.5.37-Win32-VC11-x86 --php-sdk-binary-tools-20110915
從系統菜單中打開Developer Command Prompt for VS2012
窗口,進入php-ext
目錄.windows
設置環境變量,每次從新打開命令窗口必須從新設置環境變量函數
php-sdk-binary-tools-20110915\bin\phpsdk_setvars.bat
生成目錄結構工具
執行批處理文件php-sdk-binary-tools-20110915\bin\phpsdk_buildtree.bat
.測試
phpsdk_buildtree.bat php-dev
進入php-dev
目錄,將目錄vc9
複製並重命名爲vc11
.ui
將deps-5.5-vc11-x86
目錄下的deps
目錄拷貝到vc11\x86\
下覆蓋原目錄..net
將php-5.5.37-src
目錄下的php-5.5.37-src
拷貝到vc11\x86\
下.code
php-dev --vc6 --vc8 --vc9 --vc11 --x86 --deps --php-5.5.37-src
進入php-ext\php-dev\vc11\x86\php-5.5.37-src
目錄.ip
檢查編譯環境是否完整, 生成Makefile文件開發
buildconf --force
顯示幫助
configure --help
編譯參數
configure --disable-all --enable-cli
編譯
nmake
在Developer Command Prompt for VS2012
窗口(新窗口要從新設置環境變量)做以下操做.
進入php-ext\php-dev\vc11\x86\php-5.5.37-src\ext
目錄.
..\Release_TS\php ext_skel_win32.php --extname=HelloWorld
進入HelloWorld
目錄.
打開php_HelloWorld.h文件,在PHP_FUNCTION(confirm_HelloWorld_compiled);
行後添加代碼.
PHP_FUNCTION(SayHello); //頭文件聲名函數
打開php_HelloWorld.c文件,在PHP_FUNCTION(confirm_HelloWorld_compiled)
函數後添加代碼.
//定義函數 PHP_FUNCTION(SayHello){ char *arg_string = NULL; int arg_len,str_len; char *string; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"s",&arg_string,&arg_len) == FAILURE){ return; } str_len = spprintf(&string,0,"Hello, your first extension %.78s is ok!",arg_string); RETURN_STRINGL(string,str_len,0); }
而後在PHP_FE(confirm_HelloWorld_compiled, NULL);
行後添加代碼.
PHP_FE(SayHello, NULL); //註冊函數
打開config.w32
文件,將下面一行前面的註釋//
去掉.
// ARG_ENABLE("HelloWorld", "enable HelloWorld support", "no");
返回php-ext\php-dev\vc11\x86\php-5.5.37-src
目錄,執行如下命令.
buildconf --force configure --help
注:若是報錯,打開目錄下的configure.js
文件,找到以下行刪掉最的註釋符*/
.
ARG_ENABLE("HelloWorld", "enable HelloWorld support", "no"); */
若是沒有報錯或再次執行configure --help
後,檢查輸出是否包括以下內容.
--enable-HelloWorld enable HelloWorld support
從新配置編譯參數,--enable-HelloWorld=shared
動態擴展.
執行nmake
後,會在Release_TS
目錄下生成php_HelloWorld.dll
文件,能夠拷貝到實際應用中測試.
configure --disable-all --enable-cli --enable-HelloWorld=shared nmake
爲了方便測試能夠採用靜態擴展方式進行編譯,--enable-HelloWorld=static
靜態擴展.
configure --disable-all --enable-cli --enable-HelloWorld=static nmake
靜態編譯成功後,進入Release_TS
目錄,執行如下命令測試擴展效果.
php -r "echo SayHello('HelloWorld');" //輸出: Hello, your first extension HelloWorld is ok