用最快的方式来演示如果做一个PHP扩展

原文

http://hi.baidu.com/thinkinginlamp/item/e5b89c23657b520977272c7f


前提条件是你的系统已经安装好了apache和php,并且要有一份对应的php源代码,这些都不是难事。

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

进入php源代码目录,然后看看操作过程(这里假设我们要做一个名为test的扩展):

cd ./ext
./ext_skel --extname=test
cd ./test
vi config.m4

这里要对config.m4文件做一些修改:

dnl PHP_ARG_ENABLE(test, whether to enable test support,
dnl Make sure that the comment is aligned:
dnl [  --enable-test           Enable test support])

去掉上面三行的dnl,使之变为

PHP_ARG_ENABLE(test, whether to enable test support,
Make sure that the comment is aligned:
[  --enable-test           Enable test support])

dnl在这里是起到注释的作用,当然你也可以去掉下面三句前面的dnl

dnl PHP_ARG_WITH(test, for test support,
dnl Make sure that the comment is aligned:
dnl [  --with-test             Include test support])

这中间的区别就在于编译时是使用enable-test还是with-test,前者意味着不需要第三方库,后者正好相反,这里我们选择enable-test方式。

vi test.c

我们还可以通过修改test.c文件来增加或者的功能,这里我们是演示目的,就不修改这个文件了。

/usr/local/bin/phpize

执行这一步的目的是根据config.m4文件的内容生成configure文件

./configure --enable-test

make

这时,在./ext/test/modules目录就应该已经生成了test.so扩展模块了,怎么样,很简单吧。

make install

会自动把生成的test.so模块拷贝到php认为正确的扩展目录,我测试的时候此目录为 

/usr/local/lib/php/extensions/no-debug-non-zts-20060613/

no-debug-non-zts-20060613部分可能有差异,具体依赖与php的版本和编译选项。

如果你不详把扩展放在上面所示的目录中,可以

vi /usr/local/lib/php.ini

修改extension_dir选项为你的扩展目录名,并把test.so复制到此目录中

然后执行扩展目录中的test.php文件(此文件是自动生成的)

/usr/local/bin/php -f test.php

会发现如下字样:

Functions available in the test extension:
confirm_test_compiled

Congratulations! You have successfully modified ext/test/config.m4. Module test is now compiled into PHP.

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

test.php文件中使用dl函数来动态加载test.so扩展,如果你想让php自动加载此扩展,只要进行如下操作即可:

vi /usr/local/lib/php.ini 加入extension=test.so

/usr/local/apache2/bin/apachectl restart

此时,如果你浏览phpinfo(),会发现test相应的扩展信息。

如果你使用命令行,那么通过下面命令也能看到:/usr/local/bin/php -m

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

我们编写的test扩展成功了,当然,目前它还没有任何有用的功能,呵呵。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值