虽说现在的PHP功能已经非常完善,一般情况下不需要我们自己手动扩展就已经可以完全支持我们的使用。但是,我觉得掌握扩展PHP这门技术对于我们以后的发展应该是很有帮助的。
下面我就带大家开始扩展PHP。
首先我们需要下载PHP源码。下载完成以后,我们第一步要做的就是安装PHP。准备工作完成以后,下面开始我们正式的PHP扩展。
我们的源码根目录以/software/php5为例。
生成骨架
在源码根目录下有ext文件夹,我们进入该文件夹
# cd /software/php5/ext
然后使用其扩展工具ext_skel来生成相应的骨架。
# ./ext_skel –extname=onmpw //--extname选项的作用就是指定扩展的名称。
该命令执行完成以后,输出如下的内容
Creating directory onmpw
Creating basic files: config.m4 config.w32 .svnignore onmpw.c php_onmpw.h CREDITS EXPERIMENTAL tests/001.phpt onmpw.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/onmpw/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-onmpw
5. $ make
6. $ ./sapi/cli/php -f ext/onmpw/onmpw.php
7. $ vi ext/onmpw/onmpw.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/onmpw/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
这说明我们的命令已经成功执行。我们发现在ext目录下会产生一个onmpw文件夹。查看该文件夹中的内容,会有下面的几个文件。
config.m4 config.w32 CREDITS EXPERIMENTAL onmpw.c onmpw.php php_onmpw.h tests
编辑文件
接着我们编辑config.m4文件,找到如下的内容
dnl PHP_ARG_ENABLE(onmpw, whether to enable onmpw support,
dnl Make sure that the comment is aligned:
dnl [ --enable-onmpw Enable onmpw support])
然后将注释去掉,也就是删掉每行开头的dnl。
打开onmpw.c文件,在文件的最后添加如下代码
PHP_FUNCTION(onmpw_hello_world)
{
php_printf("Hello World!!\r\n");
}
这里面就是我们的方法体。onmpw_hello_world是方法名称,也就是我们在php代码中调用的方法名。
const zend_function_entry zts_research_functions[] = {
PHP_FE(onmpw_hello_world, NULL)
PHP_FE_END
};
然后我们找到上面的代码,按照上面的形式添加PHP_FE(onmpw_hello_world, NULL)。修改完成以后保存退出。
然后再编辑php_onmpw.h文件。在大概45行的位置添加如下代码
PHP_FUNCTION(onmpw_hello_world);
然后保存退出。
编译扩展
我们PHP安装目录以/usr/local/php5为例。
这里编译分两种情况,一种是动态编译,一种是静态编译。下面我们先来看如何进行动态编译。
动态编译
动态编译需要用到一个工具phpize。该工具在/usr/local/php5/bin 目录下。动态编译步骤如下:
# cd ext/onmpw //进入扩展目录
# /usr/local/php5/bin/phpize //生成配置文件等
# ./configure –php-config=/usr/local/php5/bin/php-config
# make && make install
成功以后会在/usr/local/php5//lib/php/extensions/no-debug-non-zts-20121212/目录下产生onmpw.so类库。然后我们在php.ini中引入该类库就可以使用了。
静态编译
静态编译相当于重新编译安装php,但是静态编译成功后不需要我们再在php.ini文件中进行配置就可以使用我们的扩展。
进行静态编译需要用到buildconf这个工具,该工具在源码根目录下。静态编译的步骤如下
# cd /software/php5
# ./buildconf –force
# ./configure –enable-onmpw
# make && make install
这样就可以在php代码中直接使用hello_world函数了。
通过以上的步骤我们就可以实现自己的php扩展了。这里需要说明一下,在开头部分,我们讲到将扩展放到源码根目录下的ext目录下。其实这并不是必须的,只是为了便于管理,我们可以将其放在任何的位置。比如/extensions目录下。但是,在使用ext_skel生成骨架的时候要使用—skel选项来指定目录这个目录就是源码中的ext/skeleton。
# cd /extensions
# /software/php5/ext/ext_skel –extname=onmpw –skel=/software/php5/ext/skeleton
到这,基本上一个完整的简单的扩展就可以实现了。希望本文对大家有所帮助。