本文分享关于如何使用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文件
载入你的PHP扩展文件路径
切换一下解决方案为release
右键右侧项目属性加入PHP源码目录(看你的实际路径)
E:\php7
E:\php7\main
E:\php7\TSRM
E:\php7\Zend
右键项目属性,C/C++,预处理器,预处理器定义,编辑,加入以下变量:
ZEND_DEBUG=0
PHP_EXTENSION
PHP_WIN32
ZEND_WIN32
HAVE_TEST=1(这里红色部分,要改成你的扩展名称,不改成你的扩展名,php会不识别)
COMPILE_DL_TEST(这里红色部分,要改成你的扩展名称,不改成你的扩展名,php会不识别)
ZTS(这一个变量加上是开启线程安全,不加是关闭线程安全)
在E:\php7\win32\build\文件夹里找到“config.w32.h.in”,将这个文件复制到E:\php7\main\文件夹里,去掉后面的“.in”
右键项目属性,连接器,输入,附加依赖项,编辑,将php7.lib的路径放进去(这个文件在php编译后的程序文件夹里,根目录的dev文件夹里)
第五步
最后在vs2017中点击生成解决方案,完成编译。
将\ext\demo\Release\下的demo.dll文件放到PHP中添加扩展使用即可。
1
2
3
demo();
?>
有时间在出个如何在linux中编译so扩展文件,一点PHP,一点技术分享。