开发环境:Centos 6.2 ;apace 2.2; php 5.5.5 ;
第一步:扩展文件生成
运行PHP源码中ext中的ext_skel脚本(主要参数为 --extname ),会在ext中生成extname的文件夹,即扩展项目(本次测试使用sayhello作为模块名)
第二步:扩展项目文件
查看sayhello文件下,有一下几个重要文件:config.m4 php_sayhello.h sayhello.php sayhello.c 。
(1)sayhello.c :
基本函数:
PHP_INI_BEGIN(): 加载扩展在php.ini中的配置信息;
PHP_MINIT_FUNCTION(sayhello):php初始化时,都会执行每个模块的初始化函数;
PHP_MSHUTDOWN_FUNCTION(sayhello);apache stop的时候,卸载php模块,这个时候执行此函数;
PHP_RINIT_FUNCTION(sayhello):每次request执行的函数;
PHP_RSHUTDOWN_FUNCTION(sayhello);request
结束或者被die(exit)掉了,执行这个函数,收拾烂摊子(释放内存等等);
自定义函数:
PHP_FUNCTION(sayhello):你的扩展定义的函数,必须使用zend给定的这个宏来定义,每一个定义的函数都必须加入到 sayhello_functions[]
这个结构体中。
(2)config.m4 保存扩展编译配置信息的文件
第三步: 修改config.m4,让你的sayhello可以被编译
PHP_ARG_ENABLE(sayhello, whether to enable sayhello support,
dnl Make sure that the comment is aligned:
[ --enable-sayhello Enable sayhello support])
第四步:正常的编译步骤./config make make install 生成sayhello.so
第五步:配置php.in,重启服务器,就可以在php代码中使用自己sayhello扩展的sayhello函数了
windows使用扩展最好在windows下重新编译源码生成dll.