轉載請註明文章出處:
https://tlanyan.me/windows-co...
準備工做
- https://github.com/Microsoft/...下載PHP-SDK(在右邊的「clone or download」點擊,選擇下方的「download zip」);
- https://windows.php.net/downl...下載PHP7.2的源碼,此時最新版本是7.2.8,選擇「php-7.2.8-src.zip」下載;
- https://visualstudio.microsof...選擇「visual studio community 2017」,安裝過程當中選擇C++功能。
編譯
- 新建編譯目錄,例如「D:PHP2Compile」;
- 將"php-sdk-binary-tools-master.zip"中的文件解壓到編譯目錄下;
- 按住shift在編譯目錄內點擊右鍵,選擇「open powershell window here」;
- 執行"phpsdk-vc15-x64.bat",成功後提示符從「>」變成"$";
- 執行"phpsdk_buildtree phpdev",成功後目錄中會多一個「phpdev」目錄,命令行的目錄自動切換到"phpdev/vc15/x64";
- 在"phpdev/vc15/x64"目錄下新建php-src文件夾,將PHP源碼複製到此目錄;
- 切換到php-src目錄(cd php-src),執行"phpsdk_deps -u";
- 在「phpdev/vc15/x64」下創建pecl目錄(與PHP源碼目錄同級),將拓展複製到該目錄下;
- 在PHP源碼目錄內執行"buildconf";
- 執行「configure --一些選項」命令配置編譯選項,例如"configure --disable-all --enable-cli --enable-cgi --enable-zlib --enable-hash --enable-session --without-gd --with-bz2 --enable-yourext";
- 執行nmake命令編譯PHP及拓展。
編譯成功後,在源碼的X64目錄下會生成「Release」或"Release_TS"目錄,編譯好的php.exe及生成的拓展dll均在此目錄下。dll的文件名爲php_xxxx.dll,例如"php_tlanyan.dll"。php
TS和NTS
默認編譯出來的拓展是TS(線程安全)的版本(位於Release_TS目錄中),若是要編譯非線程安全版本,configure時加入"--disable-zts"選項。git
編譯成功後,線程安全版本信息爲(php.exe -v輸出):github
PHP 7.2.8 (cli) (built: Aug 14 2018 10:53:41) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
非線程安全版本輸出:shell
PHP 7.2.8 (cli) (built: Aug 14 2018 11:47:40) ( NTS MSVC15 (Visual C++ 2017) x64 ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
注意事項
- 原PHP-SDK下載地址https://windows.php.net/downl...只能下載PHP7.1及之前的SDK工具,PHP7.2的工具需從github上下載;
- 若是已經以前安裝過visual studio,執行"phpsdk-vc15-x64.bat"出現"could not determine 'vc15' directory"的錯誤提示,表示未安裝VC工具,啓動安裝工具添加VC支持便可;
- 編譯前可將不須要的拓展刪除,加快編譯速度;
- 若是自定義的拓展出現「cannot open include file 'win95nt.h'」,可以使用這個頭文件:https://github.com/nonylene/i...。
參考
- https://wiki.php.net/internal...
- http://blog.51cto.com/lancelo...