在Windows上編譯PHP及擴展的方法

在windows下編譯php擴展

查看官方文檔

在你開始之前

在Windows上構建PHP前需要做三件事

  • 正確設置的構建環境,包括編譯器和PHP SDK
  • 預編譯的庫和PHP依賴的第三方庫
  • PHP源碼

編譯器

要求

PHP支持使用Microsoft的Visual C ++編譯器進行構建。不支持MinGW和Cygwin。
ICC和clang可以用於實驗目的。但是請注意,只有使用Visual C ++才能保證生產質量的二進制文件。
完全支持免費使用的Community VC ++版本,並且可以使用它們。
有關更多信息以及如何獲取編譯器,請參閱受支持的版本。支持以下VC ++版本:

  • Visual C++ 14.0 (Visual Studio 2015) for PHP 7.0 or PHP 7.1.
  • Visual C++ 15.0 (Visual Studio 2017) for PHP 7.2, PHP 7.3 or PHP 7.4.
  • Visual C++ 16.0 (Visual Studio 2019) for master.

支持特定的Visual Studio版本意味着僅支持其默認平臺工具集。使用非默認平臺工具集(例如Visual Studio 2019中的14.16)構建PHP可能有效,但不建議這樣做。

Visual C文件名(和PHP_SDK_VS環境變量;請參見下文)中,通常縮寫爲Visual Studio版本。
在Visual Studio 2019之前,縮寫使用方案“ vc#”(例如“ vc14”)。該數字(“#”)是各個平臺工具集的主要數字。
Visual Studio 2017的預覽版本隨平臺工具集15.00一起提供,因此使用了“ vc15”。
但是,Visual Studio 2017的第一個GA版本附帶了平臺工具集14.10(以表示向後兼容性),但內部Visual Studio版本號保持爲15.00。
爲了避免混淆,保留了“ vc15”。對於Visual Studio 2019內部版本(主版本),“ vc#”最終已更改爲“ vs#”(請注意“ s”),該數字現在指定主要的內部Visual Studio版本號。

設置

  • Github獲取最新的穩定SDK版本

    • 在構建PHP 7.2+時,需要新的PHP SDK
    • 閱讀Github頁面上的PHP SDK特定說明。
  • 如果編譯PHP 7.0+:

    • 安裝Visual Studio 2015
  • 如果編譯PHP 7.2+:

    • 安裝Visual Studio 2017
  • 如果是master:

    • 安裝Visual Studio 2019
  • 可選工具

    • Git
    • Cppcheck
    • Clang

命令提示符

PHP SDK 2.0.0+提供了啓動腳本,這些腳本可以自動設置編譯器環境。入門腳本還提供了注入定製設置的功能。要創建自定義的安裝腳本,請將您的代碼放入phpsdk-local.bat PHP SDK根目錄中的文件中。以下變量在PHP SDK Shell中自動可用

  • PHP_SDK_ARCH-用於環境設置的目標構建體系結構
  • PHP_SDK_ OS _ARCH -操作系統架構
  • PHP_SDK_PHP_CMD-集成的PHP二進制包裝器腳本
  • PHP_SDK_ROOT_PATH-PHP SDK根目錄的路徑
  • PHP_SDK_VS-用於該環境的Visual C ++版本(在PHP SDK 2.2.0beta4之前,此變量名爲PHP_SDK_VC)
  • 還有其他一些不相關的變量,可以通過以下set命令查看PHP SDK附帶的工具的完整列表可以在存儲庫自述頁面上找到。

每個版本的Visual Studio(或Windows SDK)都提供了一個用於編譯的命令提示符環境(可從“開始”菜單啓動)。例如,如果您要省略啓動腳本用法或要測試Visual Studio的預發行版本,則可以使用它。

  • 如果編譯PHP 7.0+,請打開“ VS2015 x64本機工具命令提示符”或“ VS2015 x86本機工具命令提示符”。
    本文檔其餘部分中的所有命令都應在相應的命令提示符下運行。

下載要求

  1. 獲取PHP源代碼,有兩種選擇:
  2. 獲取二進制工具:
    • 可從github獲得
    • 或者以zip格式獲取標籤,或者克隆git存儲庫並簽出標籤
  3. 獲取PHP依賴的庫:
    • 使用PHP SDK工具通過調用自動獲取合適的依賴項 phpsdk_deps -u或者,從下載打包的deps,選擇匹配的VC ++版本和體系結構目錄。請注意,不再爲PHP 7.2及更高版本提供.7z軟件包。
      注意:這應該包括構建大多數核心擴展所需的庫。但是,某些其他擴展可能需要其他庫,頭文件和幫助程序。請參閱libs,獲取所需的版本,然後將存檔解壓縮到deps目錄中(請參見下文)。PECL擴展目錄下提供了另一組用於PECL擴展構建的庫。如果需要,它們需要手動獲取。

設置構建目錄

在構建PHP之前,該操作只能執行一次。此處使用的參考二進制SDK目錄爲c:\php-sdk,可以根據具體情況使用任意位置。因此,我們將該路徑C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src用作PHP 7.1.0的Visual C ++ 64位版本的參考路徑。

  1. 設置PHP SDK
  • 創建構建目錄 c:\php-sdk 解壓二進制工具歸檔到這個目錄,它應包含三個子目錄: bin, lib and msys2
  1. 打開命令提示符並輸入構建目錄:
cd c:\php-sdk
  1. 運行啓動程序腳本(例如,對於Visual Studio 2015 64位版本),運行phpsdk-vc14-x64.bat
  2. 運行phpsdk_buildtree批處理腳本,將會創建構建所需的目錄結構:
phpsdk_buildtree phpdev
  1. 該phpsdk_buildtree腳本將根據當前使用的VC ++版本創建路徑,並切換到新創建的目錄
  2. 將PHP源代碼提取到,其中:C:\php-sdk\phpdev\vX##\x##
    • vX##是您使用的編譯器版本(eq vc14或vs16)
    • x##是您的架構(x86或x64)
    • 例如: C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src
  3. 在提取PHP源代碼的同一目錄中,有一個deps目錄。請執行以下任一操作
    • 切換到php源目錄並運行 phpsdk_deps -u
    • 如果您在上一步中手動下載了依賴項,請將其解壓縮到deps中

編譯

請注意,PHP SDK腳本當前不支持任何交叉構建。

  1. 運行啓動程序腳本自動爲所需的構建配置設置好環境
c:\php-sdk\phpsdk-vc14-x64.bat
  1. 將目錄切換到您的PHP源代碼的位置,例如
cd C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src
  1. 運行
buildconf
  1. 查看編譯幫助概述:
configure --help
  1. 創建您的configure :
configure --disable-all --enable-cli --enable-$remains
  1. 編譯php 運行
nmake
  1. 如果要把PHP構建和擴展打包到壓縮包中,請在’nmake’之後運行:
nmake snap
  1. 編譯後的PHP現在位於“C:\php-sdk\phpdev\vX##\x##\php-source-directory\Release_TS”下。如果您運行“ nmake snap”,則zip文件也將位於此處。如果使用“ –disable-zts”進行編譯,則已編譯的PHP將位於“C:\php-sdk\phpdev\vX##\x##\php-source-directory\Release”下。可以通過configure --enable-object-out-dir 參數可以設置編譯php的位置。

更改後重新編譯

  1. 清理舊的已編譯二進制文件
nmake clean
  1. 如果您需要更新“配置”腳本
buildconf --force
  1. 創建您的makefile:請參見發佈
configure --disable-all --enable-cli --enable-$remains
  1. 編譯
nmake

構建PECL擴展

許多PECL擴展已經具有預構建的DLL,可以從PECL網站上的擴展頁面下載這些DLL。例如,在APCu擴展頁面上,發行檔案鏈接旁邊有* DLL *鏈接。他們將您帶到一個頁面,您可以在其中下載所需的PHP版本和體系結構的已編譯擴展。

要構建PECL擴展(例如APCu):

  1. 在PECL(APCu)上打開擴展的頁面
  2. 通過以下方式下載擴展源:
    • 下載源檔案
    • 從擴展程序的存儲庫中獲取源代碼(可以在瀏覽源代碼下找到鏈接
  3. 創建一個pecl與您的PHP源目錄相同級別的目錄,例如C:\php-sdk\phpdev\vc14\x64\pecl
  4. 將擴展源代碼提取或克隆到pecl目錄
    • 如果克隆,則克隆到子目錄,例如 C:\phpsdk\phpdev\vc14\x64\pecl\apcu
      源代碼檔案應該已經包含一個名爲例如的子目錄 apcu-4.0.7
    • 調用啓動程序腳本以自動爲所需的構建配置fe設置環境c\php-sdk\phpsdk-vc14-x64.bat
  5. 輸入您的PHP源目錄
  6. 通過運行以下命令來重建配置腳本:
buildconf
  1. configure –help現在執行應包含啓用APCu的選項
--enable-apcu Whether to enable APCu support
  1. 配置和構建:
configure --disable-all --enable-cli --enable-apcu
nmake
  1. 使用php -m命令測試二進制文件,以確保已加載APCu。此時,已編譯的擴展名將位於發行目錄中。

陷阱

對於可能的PHP SDK問題,請查閱PHP SDK自述文件
從PHP 7.3開始,可以使用–enable-native-intrinsics開關。
然後,生成的二進制文件將需要具有相應功能集的處理器。
例如,如果設置–enable-native-intrinsics =avx2,請確保目標計算機具有支持AVX2的處理器。

教程至此結束,下面是我的安裝過程。

官方下載Visul Studio

在這裏插入圖片描述

下載php源碼

官網下載

環境準備

執行下面命令

phpsdk-vc15-x64.bat

output

[vcvarsall.bat] Environment initialized for: 'x64'

PHP SDK 2.2.1-dev

OS architecture:    64-bit
Build architecture: 64-bit
Visual C++:         14.23.28106.4
PHP-SDK path:       C:\Users\xxx\Downloads\PHP2Compile\php-sdk-binary-tools-master

在php-sdk-binary-tools 會生成出phpdev、phpdev\vs16\x64。把下載好的php源碼放在些目錄中。

  • vc##是您正在使用的編譯器版本(eq vc15)
  • x##是你的構建的系統位數(x86 或 x64)

運行下面命令,php 會自動下載 需要的依賴包 (php7 以前需要手動下載 php-dsp 文件)

phpsdk_deps -u

output

Configuration: 7.3-vc15-x64-stable

Processing package ICU-64.2-vc15-x64.zip
Processing package apache-2.4.28-vc15-x64.zip
Processing package c-client-2007f-vc15-x64.zip
...

開始編譯

切換到php源碼目錄

buildconf

output

Rebuilding configure.js
Now run 'configure --help'

編譯php

configure --disable-all  --enable-cli

output

PHP Version: 7.3.11

Saving configure options to config.nice.bat
Checking for cl.exe ...  <in default path>
WARNING: Using unknown MSVC version 19.23.28106.4
....
....
| Build type        | Release                      |
| Thread Safety     | Yes                          |
| Compiler          | MSVC 19.23.28106.4, untested |
| Architecture      | x64                          |
| Optimization      | PGO disabled                 |
| Native intrinsics | SSE2                         |

## | Static analyzer   | disabled                     |

Type 'nmake' to build PHP

執行完這一步會在main目錄下生成config.w32.h文件,編譯php擴展會用到這個文件。
運行

nmake

執行這下步會有些慢先去喝口水,休息下。
編譯好的php在 php-sdk-binary-tools-master\phpdev\vs16\x64\php-7.3.11-src\x64\Release_TS 目錄
運行

php -i

能執行說明成功了

編譯擴展

下載擴展 arraylist

buildconf
configure --disable-all --enable-cli --enable-yaf=shared
nmake

–enable-cli-xxx=shared 表示動態鏈接庫,會生成單獨的dll文件。否則會編譯到php中。
這就編譯完了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章