在Windows上开发PHP扩展模块
虽然不怎么用到windows下开发php扩展,但是有的时候有些人就是想安装到windows下运行。没有办法,只能针对性的重新编译。
这里较全面的介绍如果在windows下编译php扩展
一、开发环境搭建
1. Windows10 64位,
下载wampserver64位,https://www.wampserver.com/en/#wampserver-64-bits-php-5-6-25-php-7
在安装wampserver64位时,尽量把相关的SDK安装全了。尤其是Microsoft Visual C++ 2015-2022 Redistributable(x64)。这个东西到官网下载最快,不要到其他网站,很多垃圾。不安装这些sdk,可能wampserver64起不来哦。
因为我用的是php7.2.34版本,所以还需要下载php7.2.34版本的源代码。https://www.php.net/distributions/php-7.2.34.tar.gz
因为php-7.2.34使用VC15 x64编译的,VC15对应的Visual Studio 2017。所以尽量对应的版本来编译。
还需要下载Cygwin (http://www.cygwin.com)
Cygwin是在调用PHP扩展模块生成工具ext_skel_win32.php时使用,主要模拟一些unix的命令,否则该文件中的一些代码是执行不通的哦。注意:安装时提示选取镜像站点下载模块时,选择.cn结尾的站点速度最快。
安装完成Cygwin之后(安装路径记为[Cygwin Path]),需要将[PHP Source]\ext\ext_skel_win32.php文件中的$cygwin_path设置为[Cygwin]\bin目录路径。
这里有很多坑,但是一些环境必要的插件要勾选。具体参考一下这篇文章https://blog.csdn.net/u010356768/article/details/90756742。如果有额外你需要用的,自己追加啊。
最终会在桌面生成一个Cygwin64 Terminal的快捷方式。
cygwin 安装路径c:\cygwin64,根据你实际安装的来替换。
“PHP源文件目录/ext/ext_skel_win32.php”,在这里就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的
cygwin路径。$cygwin_path = 'c:\cygwin64\bin';
把$cygwin_path修改为你实际安装cygwin的路径,这样在下一步生成扩展的时候就不太会出错了。
二、生成扩展
先把php.exe追加到操作系统的环境变量里。例如:
再打开cmd命令,进入[PHP Source]\ext\目录,执行php ext_skel_win32.php --extname=foo,最终在[PHP Source]\ext\目录下会生成一个foo目录,扩展插件样例代码生成成功。
然后用VS2017在foo目录创建一个工程,并做一些配置:具体参考:https://www.cnblogs.com/taotaodmw/p/14206707.html。该步骤要注意,我们是php7.2.34,需要把php7ts.lib配置到vs2017里。
但是这里需要选择Windows SDK版本为10,如果选择其他版本,有可能编译的时候说找不到xxx.h文件。
正常这样下来,foo.dll是会在[PHP Source]\ext\foo\x64\release下生成了。
最后把这个foo.dll复制一份到
把foo.dll拷到C:\wamp64\bin\php\php7.2.34\ext目录下,修改名称为php_foo.dll,这样在php.ini(注意是appache里的php.ini链接,参考:C:\wamp64\bin\apache\apache2.4.51\bin\php.ini。不改这个重启也无用)里加上一行extension=foo就可以了。因为配置文件是按照这样的格式识别的:extension='php_<ext>.dll
重启一下apache,查看phpinfo();,会发现我们的PHP扩展foo()已经加载进来,已经可以使用这个foo扩展了。