c写成php的扩展_如何用C语言写PHP7扩展DLL文件——windows篇

本文详细介绍了如何在Windows环境下利用C语言编写PHP7扩展DLL。通过下载PHP源码、使用ext_skel_win32.php生成扩展骨架、修改C源码、配置VS2017及编译DLL,最终将编译后的demo.dll添加到PHP环境中以使用自定义扩展。
摘要由CSDN通过智能技术生成

本文分享关于如何使用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)在这个方法下面添加你的方法代码,例如:

1

2

3

PHP_FUNCTION(demo){

php_printf("Hello C extension");

}

接着修改下面这个方法

1

2

3

4

5

constzend_function_entrydemo_functions[]={

PHP_FE(confirm_demo_compiled,NULL)/* For testing, remove later. */

PHP_FE(demo,NULL)//这里加一行代码

PHP_FE_END/* Must be the last line in demo_functions[] */

};

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

1

#define PHP_COMPILER_ID "VC14"

第四步

使用VS2017编辑器编译DLL文件

077c03f3520c78338cf92538b032cfff.png

77b0d6f72250115d0b60bd2dd3b70f42.gif

载入你的PHP扩展文件路径

77b0d6f72250115d0b60bd2dd3b70f42.gif

77b0d6f72250115d0b60bd2dd3b70f42.gif

切换一下解决方案为release

77b0d6f72250115d0b60bd2dd3b70f42.gif 右键右侧项目属性加入PHP源码目录(看你的实际路径)

E:\php7

E:\php7\main

E:\php7\TSRM

E:\php7\Zend

77b0d6f72250115d0b60bd2dd3b70f42.gif

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

ZEND_DEBUG=0

PHP_EXTENSION

PHP_WIN32

ZEND_WIN32

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

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

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

77b0d6f72250115d0b60bd2dd3b70f42.gif

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

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

77b0d6f72250115d0b60bd2dd3b70f42.gif

第五步

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

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

1

2

3

demo();

?>

77b0d6f72250115d0b60bd2dd3b70f42.gif

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值