用apache的动态so模式编写和编译php扩展
2009-04-14 14:23
363 查看
看过我另外一篇关于用c语言编写php扩展so模块的朋友,应该已经了解大致的php模块编写过程,(原文:http://www.toplee.com/blog/56.html) 不过该文中没有专门针对已经安装好的系统进行说明,如何在现有apache、php运行环境下添加一个动态的so扩展,下面简单的整理一下。
大致的步骤如下:
#cd /usr/port/distfiles/php-5.1.4/ext/ (进入到您的php源码目录)
#./ext_skel --extname=toplee (此处的toplee为您的扩展so的名称)
#cd ..
#vim ./ext/toplee/config.m4 (修改config.m4文件,此处细节可以参考我另外那篇文章中说明)
#vim ./ext/toplee/toplee.c (修改和加入您自己的c代码)
#vim ./ext/toplee/toplee.h (修改和添加函数定义代码)
#./buildconf --force (加上force参数是避免您使用的php版本为release版本)
如果上面命令执行中提示autoconf not found之类的错误,可以执行下面命令
#export PHP_AUTOCONF=/usr/local/bin/autoconf259 (这里的autoconf259路径和名称根据您自己安装的autoconf情况而定)
#export PHP_AUTOHEADER=/usr/local/bin/autoheader259 (autoheader259同上)
#./buildconf --force
#./configure --disable-all --with-toplee=shared --with-apxs2=/usr/local/sbin/apxs
上面命令中,--disable-all是为了加快编译速度而使用的,减少php默认要编译的模块数量。 --with-toplee=shared为了编译后能直接生产.so文件, --with-apxs2=/usr/local/sbin/apxs是根据您服务器上apache安装具体路径和版本来确定的
#make
#cp ./ext/toplee/.libs/toplee.so /usr/local/lib/php/20050922/ (把生产的so文件拷贝到您的php存放so扩展文件的目录下)
#vim /usr/local/etc/php/extensions.ini (加入toplee.so一行)
#/usr/local/etc/rc.d/apache22.sh restart
最后从phpinfo()函数看看返回结果,如果看到有toplee部分,那么恭喜你!如果没有,按照步骤好好检查一下!
这是我的phpinfo看到的结果:
另外,顺便提一下另外一种编译php扩展的方法,就是使用phpize工具,这种方法允许你在一个独立编写的目录下编译php的扩展,不用按照前面的方式在php源文件目录的ext下,大致的思路是:
1.创建自己的扩展目录 toplee
2.编写config.m4文件,可以参考前面ext_skel生成的范本
3.执行 phpize 命令
4.执行 ./configure –enable-toplee –with-apxs2=/usr/local/sbin/apxs
–with-php-config=/usr/local/bin/php-config
5.make
这时会在当前目录下生产一个toplee.so,呵呵,这就是你想要的!
另外:
安装 apxs工具
yum -y install apr-util-devel
yum -y install apr-devel
yum -y install httpd-devel
大致的步骤如下:
#cd /usr/port/distfiles/php-5.1.4/ext/ (进入到您的php源码目录)
#./ext_skel --extname=toplee (此处的toplee为您的扩展so的名称)
#cd ..
#vim ./ext/toplee/config.m4 (修改config.m4文件,此处细节可以参考我另外那篇文章中说明)
#vim ./ext/toplee/toplee.c (修改和加入您自己的c代码)
#vim ./ext/toplee/toplee.h (修改和添加函数定义代码)
#./buildconf --force (加上force参数是避免您使用的php版本为release版本)
如果上面命令执行中提示autoconf not found之类的错误,可以执行下面命令
#export PHP_AUTOCONF=/usr/local/bin/autoconf259 (这里的autoconf259路径和名称根据您自己安装的autoconf情况而定)
#export PHP_AUTOHEADER=/usr/local/bin/autoheader259 (autoheader259同上)
#./buildconf --force
#./configure --disable-all --with-toplee=shared --with-apxs2=/usr/local/sbin/apxs
上面命令中,--disable-all是为了加快编译速度而使用的,减少php默认要编译的模块数量。 --with-toplee=shared为了编译后能直接生产.so文件, --with-apxs2=/usr/local/sbin/apxs是根据您服务器上apache安装具体路径和版本来确定的
#make
#cp ./ext/toplee/.libs/toplee.so /usr/local/lib/php/20050922/ (把生产的so文件拷贝到您的php存放so扩展文件的目录下)
#vim /usr/local/etc/php/extensions.ini (加入toplee.so一行)
#/usr/local/etc/rc.d/apache22.sh restart
最后从phpinfo()函数看看返回结果,如果看到有toplee部分,那么恭喜你!如果没有,按照步骤好好检查一下!
这是我的phpinfo看到的结果:
另外,顺便提一下另外一种编译php扩展的方法,就是使用phpize工具,这种方法允许你在一个独立编写的目录下编译php的扩展,不用按照前面的方式在php源文件目录的ext下,大致的思路是:
1.创建自己的扩展目录 toplee
2.编写config.m4文件,可以参考前面ext_skel生成的范本
3.执行 phpize 命令
4.执行 ./configure –enable-toplee –with-apxs2=/usr/local/sbin/apxs
–with-php-config=/usr/local/bin/php-config
5.make
这时会在当前目录下生产一个toplee.so,呵呵,这就是你想要的!
另外:
安装 apxs工具
yum -y install apr-util-devel
yum -y install apr-devel
yum -y install httpd-devel
相关文章推荐
- 用apache的动态so模式编写和编译php扩展
- 用apache的动态so模式编写和编译php扩展
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- LINUX下PHP编译添加相应的动态扩展模块so(不需要重新编译PHP,以openssl.so为例)
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- PHP扩展开发之动态加载so模块与静态重编译PHP(下)
- LINUX下PHP编译添加相应的动态扩展模块so(不需要重新编译PHP,以openssl.so为例)
- LINUX下PHP编译添加相应的动态扩展模块so(不需要重新编译PHP,以openssl.so为例)
- LINUX下PHP编译添加相应的动态扩展模块so(不需要重新编译PHP,以openssl.so为例)
- PHP扩展框架各个宏编译成so动态链接库文件之后对应的函数符号对照
- PHP扩展开发之动态加载so模块与静态重编译PHP(上)
- php编译安装添加pdo_mysql.so扩展
- PHP动态编译出现Cannot find autoconf 动态编译PHP的memcache扩展库
- c写php扩展之编译php源码,创建扩展模块,编写扩展demo
- php5.3动态编译gd库 zlib扩展 mcrypt扩展 mysqli扩展
- 用phpize编译动态扩展模块
- PHP扩展编写与编译
- WAMP环境下(apache2.2.21+Php5.3.10)编写PHP扩展
- 扩展41:查看Apache php mysql nginx的编译参数: