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

本文介绍了如何使用C语言为PHP开发扩展模块,包括动态加载的共享库和静态编译的扩展。详细步骤涵盖了从创建模板文件到编译安装的过程,并讨论了不同配置选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前准备做的东西,选择了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一下,否则可能部分文件不会被重新编译,导致扩展模块无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值