php扩展开发入门
幻冰小站 浏览次数:504 2020-07-24 10:20:35

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

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

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

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

4、cmd命令行在d:\php\ext目录中运行 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、现在开始编译,菜单->生成,应该会提示找不到..\main\config.w32.h,在d:\win32\build\config.w32.h.in 到d:\php\main目录下并改名为config.w32.h

然后需要复制d:\php\dev\php5ts.lib 到d:\php\ext\yourext 目录

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

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

然后必须在 d:\php\main\config.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])