VS2019 开发PHP 拓展(一)环境准备
准备工作
- 下载 “php-sdk-binary-tools”
在右边的“Clone or download”点击,选择下方的“Download ZIP”
- 下载 “PHP源码”
此时最新版本是7.4.4,选择“php-7.4.4-src.zip”下载,
根据 Build your own PHP on Windows
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.
即 vs2019 只能编译 php-src 的 master 分支,所以需要下载 master 分支源码,在右边的“Clone or download”点击,选择下方的“Download ZIP”
- 下载 “Visual Studio 2019”
选择 “社区” 下的 “免费下载” 进行下载,
-
将
php-sdk-binary-tools-master.zip解压到D:\zodream\php-sdk-binary-tools -
按住shift在编译目录内点击右键,选择“
在此处打开Powershell窗口”; -
执行”
.\phpsdk-vs16-x64.bat”,成功后提示符从“>”变成“$”; -
执行“
phpsdk_buildtree phpdev”,成功后目录中会多一个“phpdev”目录,命令行的目录自动切换到“phpdev/vc16/x64”; -
在“
phpdev/vc16/x64”目录下新建php-src文件夹,将PHP源码复制到此目录; -
切换到
php-src目录(cd php-src),执行“phpsdk_deps -u”; -
在“
phpdev/vc16/x64”下建立pecl目录(与PHP源码目录同级),此目录放拓展的源码。如果为自己开发的拓展,请参考【下一章】。
编译流程
- 将拓展源码复制到该目录下(
D:\zodream\php-sdk-binary-toolsphpdev\vc16\x64\pecl);
如果为自己开发的拓展,则不需要这一步,下一步会自动发现这些拓展,直接配置编译选项则可以
- 在PHP源码目录内(
D:\zodream\php-sdk-binary-tools\phpdev\vs16\x64\php-src)执行”buildconf”; configure --help查看能够使用的配置选项,包括你自己的插件什么的- 执行“
configure –一些选项”命令配置编译选项,例如”configure –-disable-all –-enable-cli –-enable-cgi –-enable-zlib –-enable-session –-without-gd -–with-bz2 –-enable-yourext”;
编译 php
我的编译php 参数
configure --disable-all --enable-cli --with-mysqlnd -–enable-cgi –-enable-zlib –-enable-session --with-bz2 --with-mysqli --enable-pdo --with-pdo-mysql --enable-redis --enable-zodream --enable-fileinfo --with-curl --with-gettext --enable-mbstring --with-openssl --with-imagick --with-pthreads
编译 PECL 拓展, 例如: apcu
- 执行
nmake命令编译PHP及拓展, - 如果希望压缩生成的 PHP 生成和扩展,则"nmake"之后也会运行:
nmake snap - 完成一些更改后重新编译, 清理旧的编译二进制文件
nmake clean, 如果需要更新"configure"脚本buildconf --force, 然后重复编译 3、 4 步
编译成功后,在源码的X64目录下会生成“Release”或“Release_TS”目录,编译好的php.exe及生成的拓展dll均在此目录下。dll的文件名为php_xxxx.dll,例如“php_zodream.dll”。
默认编译出来的拓展是TS(线程安全)的版本(位于Release_TS目录中),如果要编译非线程安全版本,configure时加入“–disable-zts”选项。
转载请保留原文链接: https://zodream.cn/blog/id/101.html