您的位置:首页 > 运维架构 > Linux

在linux上进行php开发扩展

2014-03-11 17:35 246 查看
运行环境:


我在服务器上曾经配过lamp,php版本为5.3.10,可在ubuntu上配置的php不是php源码,所以需要再下载一版源码,下载地址是 http://cn2.php.net/distributions/php-5.3.28.tar.bz2 (注:此版本虽为5.3.28,个人猜测只要大版本号不变,编译出的扩展是可以兼容的)

下载完成后安装:

tar -jxvf 源码包名称


找到安装路径下的ext文件夹,这里有很多常用的扩展源码,还有一个ext_skel的脚本程序,用来在Unix环境下生成扩展骨架



我们为新扩展命名为okok,使用ext_skel创建骨架:

./ext_skel --extname=okok


我们发现在ext文件夹下多了一个叫okok的文件夹,进入后有三个文件需要我们修改(config.m4, okok.c, php_okok.h):

1>config.m4

打开后注意这里



这是修改后的结果,修改前红框中的内容都被dnl注释掉了,注释说的很清楚,如果我们的扩展需要使用外部组件,则使用。。。否则使用。。。 所以这里选择第二种方式,把注释去掉,保存

2>okok.c

打开后找到



PHP_FE(confirm_okok_compiled, NULL)这是脚本自动生成的一个函数,后面有与之对应的函数体,这里我们可以添加多个自定义的函数,为了演示我们修改原confirm_okok_compiled为okok,然后在此文件中找到PHP_FUNCTION(comfirm_okok_compiled),修改为PHP_FUNCTION(okok)
,这里的对应关系大家应该不难明白,函数体里可以自定义方法,本文不涉及实现问题,我们不对函数体做修改(这里有编写好的测试代码),保存

3>php_okok.h

这是很容易忽略的一步,打开找到PHP_FUNCTION(comfirm_okok_compiled),修改为PHP_FUNCTION(okok),如果添加新的函数则对应添加

回到okok目录下,开始编译

1>/usr/bin/phpize

2>./configure

3>make

4>make install

这时,在 /usr/lib/php5/20090626 目录下,生成了okok.so扩展文件,引用扩展就不再赘述了

-------------------------------------------------------------------------------------------------------

做了一个小实验,想知道当自己写的扩展函数如果与php自身或其他扩展的函数名相同时会发生什么,结果编写了一个phpinfo()的自定义函数,重启Apache失败,静态页也无法打开
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: