PHP的扩展模块的试用笔记(1)

目前准备做的东西,选择了APACHE2+PHP5来做开发平台,主要是看中了PHP的可以用C写扩展模块的优势。

在网上找了两篇教程
http://www.phpchina.com/bbs/archiver/tid-673.html
http://www.oklinux.cn/html/developer/php/jc/20070919/36336.html

相互参照,终于算是搞明白点了

PHP的扩展可分为三种:

(1)C写共享库,然后使用dl()来装载,然后调用

(2)编译进PHP,然后直接调用

(3)在ZEND里面实现

实验了第一种与第二种方法,第三种目前还没测试
第一种与第二种的的开发步骤开始阶段差不多
以$PHP_SRC表示php源码包的起始目录
(1)# cd $PHP_SRC/ext
(2)$PHP_SRC/ext# ./ext_skel --extname=ur_php_module
这一步生成目录 $PHP_SRC/ext/ur_php_module目录,里面的主要文件有 config.m4 config.w32 .cvsignore ur_php_module.c php_ur_php_module.h这几个文件

(3)修改config.m4,确定是使用--with-xxx还是--enable-xxx的语法
4)在php_ur_php_module.h中增加自己的函数声明

PHP_FUNCTION(ur_func);

(5)在ur_php_module.c中先定义函数入口
zend_function_entry ur_php_module_functions[] = {
         PHP_FE(confirm_ur_php_module_compiled,       NULL)           /* For testing, remo    ve later. */
         PHP_FE(ur_func,NULL)
         {NULL, NULL, NULL}      /* Must be the last line in dwb_mail_functions[] */
 };

然后下面添加ur_func的具体定义
PHP_FUNCTION(ur_func)
{
 zend_printf("My Php Extension...");
}

好了,如果想要使用共享扩展,那么
第一步:你手工可以编译ur_php_module.c生成.so文件

gcc -fpic -DCOMPILE_DL_UR_PHP_MODULE=1 -I/usr/local/include -I. -I../main -I.. -I../TSRM -I../Zend -c -o ur_php_module/ur_php_module.o ur_php_module/ur_php_module.c

gcc -shared -L/usr/local/lib -rdynamic -o ur_php_module/ur_php_module.so ur_php_module/ur_php_module.o
这种方法可以更灵活,能够自己添加任意需要的其他库文件。


还可以在按照以下步骤来生成so文件
(1)$PHP_SRC/ext/ur_php_module# ./phpize
(2)$PHP_SRC/ext/ur_php_module# ./buildconf --force
生成配置文件
(3)$PHP_SRC/ext/ur_php_module# ./configure [--enable|--with]-ur_php_module
(4)make
,编译成功后,会在当前目录下发现有modules目录,里面有编译出来的.so文件

第二步:把.so文件copy到php.ini的extension_dir指定的目录中,如果你不想在php页面中每次使用自定义的方法都事先dl()一下,那么你可以在下面加上一行
extension=ur_php_module.so


如果你想使用静态扩展,
那么你需要回到$PHP_SRC目录,
(1)$PHP_SRC# ./buildconf --force
生成配置文件
(3)$PHP_SRC# ./configure [--enable|--with]-ur_php_module --with-apxs2=/usr/local/apache2/bin/apxs
(4)make clean
(5)make
(6)make install

然后重启apache


如果配置成功,怎在phpinfo()里就会显示我们自己的模块来,
ur_php_module
ur_php_module support enabled

在php页面里就可以直接调用你自己的函数了。

需要注意到是,如果你重新编译、安装php话最好先执行make clean一下,否则可能部分文件不会被重新编译,导致扩展模块无效。

你可能感兴趣的:(PHP,function,Module,扩展,Zend,extension)