1. 程式人生 > >Windows編譯PHP7.2拓展

Windows編譯PHP7.2拓展

轉載請註明文章出處: https://tlanyan.me/windows-co...

準備工作

  1. https://github.com/Microsoft/...下載PHP-SDK(在右邊的“clone or download”點選,選擇下方的“download zip”);
  2. https://windows.php.net/downl...下載PHP7.2的原始碼,此時最新版本是7.2.8,選擇“php-7.2.8-src.zip”下載;
  3. https://visualstudio.microsof...選擇“visual studio community 2017”,安裝過程中選擇C++功能。

編譯

  1. 新建編譯目錄,例如“D:PHP2Compile”;
  2. 將"php-sdk-binary-tools-master.zip"中的檔案解壓到編譯目錄下;
  3. 按住shift在編譯目錄內點選右鍵,選擇“open powershell window here”;
  4. 執行"phpsdk-vc15-x64.bat",成功後提示符從“>”變成"$";
  5. 執行"phpsdk_buildtree phpdev",成功後目錄中會多一個“phpdev”目錄,命令列的目錄自動切換到"phpdev/vc15/x64";
  6. 在"phpdev/vc15/x64"目錄下新建php-src資料夾,將PHP原始碼複製到此目錄;
  7. 切換到php-src目錄(cd php-src),執行"phpsdk_deps -u";
  8. 在“phpdev/vc15/x64”下建立pecl目錄(與PHP原始碼目錄同級),將拓展複製到該目錄下;
  9. 在PHP原始碼目錄內執行"buildconf";
  10. 執行“configure --一些選項”命令配置編譯選項,例如"configure --disable-all --enable-cli --enable-cgi --enable-zlib --enable-hash --enable-session --without-gd --with-bz2 --enable-yourext";
  11. 執行nmake命令編譯PHP及拓展。

編譯成功後,在原始碼的X64目錄下會生成“Release”或"Release_TS"目錄,編譯好的php.exe及生成的拓展dll均在此目錄下。dll的檔名為php_xxxx.dll,例如"php_tlanyan.dll"。

TS和NTS

預設編譯出來的拓展是TS(執行緒安全)的版本(位於Release_TS目錄中),如果要編譯非執行緒安全版本,configure時加入"--disable-zts"選項。

編譯成功後,執行緒安全版本資訊為(php.exe -v輸出):


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

非執行緒安全版本輸出:


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

注意事項

  1. 原PHP-SDK下載地址https://windows.php.net/downl...只能下載PHP7.1及以前的SDK工具,PHP7.2的工具需從github上下載;
  2. 如果已經之前安裝過visual studio,執行"phpsdk-vc15-x64.bat"出現"could not determine 'vc15' directory"的錯誤提示,表示未安裝VC工具,啟動安裝工具新增VC支援即可;
  3. 編譯前可將不需要的拓展刪除,加快編譯速度;
  4. 如果自定義的拓展出現“cannot open include file 'win95nt.h'”,可使用這個標頭檔案:https://github.com/nonylene/i...

參考

  1. https://wiki.php.net/internal...
  2. http://blog.51cto.com/lancelo...

原文地址:https://segmentfault.com/a/1190000016011547