php扩展开发

本文的环境是windows下开发php版本5.3

1、下载php5.3的源码包和php5.3的二进制包(平时使用的php程序包)

2、下载cygwin,并默认安装在c:cygwin,因为生成php扩展框架的程序需要cygwin

3、假设php扩展的工作目录为d:php,解压源码包和二进制包到这个目录

4、cmd命令行在d:phpext目录中运行 php ext_skel_win32.php --extname=yourext  (如果php.exe程序的路劲未加入系统环境变量则需要自己指定路径)

5、如果顺利的话应该在ext目录下生成了yourext的目录了,目录中有个xmltpm.sln的文件,用vs2008(也就是vs9)打开,貌似我用vc6打开编译有很多编译错误,可能因为官网上说明php5.3对应vc2008导致的

6、现在加入自己的第一个函数,在yourext.h中找到PHP_FUNCTION(confirm_yourext_compiled);/* For testing, remove later. */ 这一行,在下面加入PHP_FUNCTION(your_func); 代表声明了your_func的函数

7、在yourext.c中找到PHP_FE(confirm_yourext_compiled,NULL)/* For testing, remove later. */ 下面加上 PHP_FE(your_func,NULL)

8、在yourext.c中找到PHP_FUNCTION(confirm_yourext_compiled) 下面加上

 PHP_FUNCTION(your_func)

{

php_printf("Hello, php ext");

}

这样就完成了一个函数的添加

9、现在开始编译,菜单->生成,应该会提示找不到..mainconfig.w32.h,在d:win32uildconfig.w32.h.in 到d:phpmain目录下并改名为config.w32.h

然后需要复制d:phpdevphp5ts.lib 到d:phpextyourext 目录

顺利的话应该可以编译成功了,至少我编译成功了

10、因为我编译的是非线程安全版本的,所以需要修改工程属性-》配置属性-》c/c++-》预处理器 删除预处理器定义里的ZTS=1,

然后必须在 d:phpmainconfig.w32.h  加上一句#define PHP_COMPILER_ID "VC9"

否则会出现下面的错误

PHP Warning: PHP Startup: yourext: Unable to initialize module
Module compiled with build ID=API20090626,NTS
PHP compiled with build ID=API20090626,NTS,VC9
These options need to match
in Unknown on line 0

在linux下编译前需要修改配置
修改config.m4文件将10、11、12三行最前面的dnl删除掉,将

dnl PHP_ARG_WITH(ccvita, for ccvita support,
dnl Make sure that the comment is aligned:
dnl [ --with-ccvita Include ccvita support])

修改为
PHP_ARG_WITH(ccvita, for ccvita support,
Make sure that the comment is aligned:
[ --with-ccvita Include ccvita support])

原文地址:https://www.cnblogs.com/zhenzhong/p/3765328.html