在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中。
这就编译完了

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