https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2php
https://wiki.php.net/internals/windows/stepbystepbuildgit
Visual Studio 2015 社區版本
PHP-sdk-binary-tools-20110915.zip (http://windows.php.net/downloads/php-sdk/下載)
deps-7.0-vc14-x86.7z (https://windows.php.net/downloads/php-sdk/archives/下載)
php-7.0.2 (http://php.net/downloads.php下載)github
第一步windows
D:\vcmyprojects\php-sdk
--bin
--script
--share安全
而後,這個是你已經安裝完成了visual studio 2015,打開VS2015開人員命令提示,注意,編譯是必定要用這個進,普通的cmd不行,走了不少彎路。。。session
cd D:\vcmyprojects\php-sdk
bin\phpsdk_setvars.bat
MD %_%\vc14\x86\deps\bin MD %_%\vc14\x86\deps\lib MD %_%\vc14\x86\deps\include MD %_%\vc14\x64\deps\bin MD %_%\vc14\x64\deps\lib MD %_%\vc14\x64\deps\include
bin\phpsdk_buildtree.bat phpdev
編譯安裝phpphp7
回到VS2015開發人員命令提示函數
cd D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2 buildconf
configure --help
configure --disable-all --enable-cli
而後,你會看到Type 'nmake' to build PHP,而後編譯工具
nmake
在D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\Release_TS文件夾下就生成了php.exe文件,環境變量中加入這個路徑,好在命令行中能使用php命令。性能
開發PHP的第一個擴展
cd D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\ext php ext_skel_win32.php --extname=raintest1
這時候咱們在D:\vcmyprojects\php-sdk\phpdev\vc11\x86\php-7.0.2\ext就看到了本身的目錄raintest1,打開raintest1\php_raintest1.h,在
打開ext\就會看到一個test文件夾,這個就是你的擴展。
加入如下幾個php源碼目錄(實際目錄以開發者本身的目錄爲準):
E:\php-xxx-src E:\php-xxx-src\main E:\php-xxx-src\TSRM E:\php-xxx-src\Zend
右鍵項目屬性,C/C++,預處理器,預處理器定義,編輯,加入如下變量:
ZEND_DEBUG=0 PHP_EXTENSION PHP_WIN32 ZEND_WIN32 HAVE_XXX=1 COMPILE_DL_XXX ZTS 注意,要把上面的 XXX 改成大寫的擴展名 (如擴展叫 tonyenc 就把 XXX 改爲 TONYENC),不然 PHP 將沒法識別擴展。ZTS用於告訴編譯器開啓線程安全(若是去掉就是不開啓)。注意,線程安全的開啓與否,取決於前面下載到的 C:\php7-Win32-VC14-x64-ts,它也是啓用了線程安全編譯,因此這裏開啓線程安全。
#define PHP_COMPILER_ID "VC14"
這將指明運行庫是 VC14,與前面下載到的已編譯 PHP 程序匹配,從新生成下解決方案,這樣就能成功編譯了!
打開test.c
找到這一段代碼:
PHP_FUNCTION(confirm_test_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.", "test", arg); RETURN_STRINGL(strg, len, 0); }
將confirm_test_compiled改爲test_echo
再找到這一段代碼:
const zend_function_entry test_functions[] = { PHP_FE(confirm_test_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in test_functions[] */ };
將裏面的confirm_test_compiled也改爲test_echo
生成解決方案,在項目根目錄的Release文件夾裏找到本身的php擴展phptest.dll,複製到php的ext文件夾裏,在php.ini裏配置上:
extension=phptest.dll
重啓IIS,新建一個站點,在裏面新建一個test.php文件
<?php echo test_echo("123");
運行獲得結果:
這個test_echo函數,就是咱們本身的自定義函數了,你也能夠根據需求,開發本身的擴展來提升php的性能。
nmake clean buildconf --force configure --disable-all --enable-cli --enable-memcache=shared --enable-session --enable-zlib nmake
php -c tmp-php.ini -m