如何用C语言写PHP7扩展DLL文件——windows篇

2018年7月17日17:36:28 发表评论

本文分享关于如何使用C语言来编写PHP的扩展,PHP作为一门开源语言在社区中有很多热爱开源开发的爱好者,PHP之所以强大在web领域一直屹立不倒其中主要原因之一就是因为PHP拥有非常多并且强大的扩展,除了官方自己提供的扩展以外还有更多开源大牛的加入,例如韩天峰的swoole,鸟哥的yaf,yar等等,废话不多说具体步骤如下。

第一步

去官方下载PHP源码文件并且解压到电脑某个文件夹中,并且在根目录文件夹中找到下面文件\php7\ext\ext_skel_win32.php。 注:这个脚本提供给我们生成自定义扩展的骨架。

第二步

因为有些命令只支持linux系统,所以需要安装cygwin这个软件来帮助我们支持部分linux指令,并且将其设置成系统的环境变量。

执行指令 PHP ext_skel_win32.php --extname=demo。  注:先将PHP添加为系统环境变量

随后会在ext目录下生成扩展demo文件夹,里面就是将要编写的demo扩展的基本文件。

第三步

修改demo.c这个文件,找这个c语言的函数PHP_FUNCTION(confirm_demo_compiled)在这个方法下面添加你的方法代码,例如:

接着修改下面这个方法

 

注意:为了让扩展能和php运行环境匹配,要根据你的php运行环境的编译版本(php7是VC14编译的),在E:\php7\main\文件夹里的config.w32.h文件里加上:

第四步

使用VS2017编辑器编译DLL文件

如何用C语言写PHP7扩展DLL文件——windows篇 如何用C语言写PHP7扩展DLL文件——windows篇

载入你的PHP扩展文件路径

如何用C语言写PHP7扩展DLL文件——windows篇

如何用C语言写PHP7扩展DLL文件——windows篇

切换一下解决方案为release

如何用C语言写PHP7扩展DLL文件——windows篇 右键右侧项目属性加入PHP源码目录(看你的实际路径)

E:\php7

E:\php7\main

E:\php7\TSRM

E:\php7\Zend

如何用C语言写PHP7扩展DLL文件——windows篇

右键项目属性,C/C++,预处理器,预处理器定义,编辑,加入以下变量:

ZEND_DEBUG=0

PHP_EXTENSION

PHP_WIN32

ZEND_WIN32

HAVE_TEST=1(这里红色部分,要改成你的扩展名称,不改成你的扩展名,php会不识别)

COMPILE_DL_TEST(这里红色部分,要改成你的扩展名称,不改成你的扩展名,php会不识别)

ZTS(这一个变量加上是开启线程安全,不加是关闭线程安全)

如何用C语言写PHP7扩展DLL文件——windows篇

在E:\php7\win32\build\文件夹里找到“config.w32.h.in”,将这个文件复制到E:\php7\main\文件夹里,去掉后面的“.in”

右键项目属性,连接器,输入,附加依赖项,编辑,将php7.lib的路径放进去(这个文件在php编译后的程序文件夹里,根目录的dev文件夹里)

如何用C语言写PHP7扩展DLL文件——windows篇

 

第五步

最后在vs2017中点击生成解决方案,完成编译。

将\ext\demo\Release\下的demo.dll文件放到PHP中添加扩展使用即可。

如何用C语言写PHP7扩展DLL文件——windows篇

 

有时间在出个如何在linux中编译so扩展文件,一点PHP,一点技术分享。

x

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: