几步创建您的php扩展
下面以开发hello world这个简单的应用扩展为例,来说明开发的步骤,这个扩展提供一个hello_world()函数,该函数会返回一个”hello world”字符串,在php中的调用方式如下:
< ?php echo hello_world(); ?>
首先进入php源码中的ext目录,php的所有扩展库的源码都放在这里。
然后创建hello目录,这个目录里就存放我们helloworld扩展的源码和相关文件.
hqlong@hqlong:~$ cd php-5.2.6/ext/ hqlong@hqlong:~/php-5.2.6/ext$ mkdir hello
接下来在hello目录下创建三个文件,如下:
1.配置文件 config.m4
PHP_ARG_ENABLE(hello, whether to enable Hello World support, [ --enable-hello Enable Hello World support]) if test "$PHP_HELLO" = "yes"; then AC_DEFINE(HAVE_HELLO, 1, [Whether you have Hello World]) PHP_NEW_EXTENSION(hello, hello.c, $ext_shared) fi
2.扩展头文件 php_hello.h
#ifndef PHP_HELLO_H #define PHP_HELLO_H 1 #define PHP_HELLO_WORLD_VERSION "1.0" #define PHP_HELLO_WORLD_EXTNAME "hello" PHP_FUNCTION(hello_world); extern zend_module_entry hello_module_entry; #define phpext_hello_ptr &hello_module_entry #endif
3.扩展源码文件 hello.c
#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_hello.h" static function_entry hello_functions[] = { PHP_FE(hello_world, NULL) {NULL, NULL, NULL} }; zend_module_entry hello_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP_HELLO_WORLD_EXTNAME, hello_functions, NULL, NULL, NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 PHP_HELLO_WORLD_VERSION, #endif STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_HELLO ZEND_GET_MODULE(hello) #endif PHP_FUNCTION(hello_world) { RETURN_STRING("Hello World", 1); }
然后使用php所带的phpize工具来生成configure文件,并配置编译扩展。
hqlong@hqlong:~/php-5.2.6/ext/hello$ phpize hqlong@hqlong:~/php-5.2.6/ext/hello$ ./configure \ --with-php-config=/usr/local/php/bin/php-config hqlong@hqlong:~/php-5.2.6/ext/hello$ make
注意:phpize最终是借助于autoconf来生成配置文件,如果系统没有安装,请先安装后运行phpize.
我用的是ubuntu系统,使用
sudo apt-get install autoconf
来在线安装。
当然,如果你使用的是redhat发行版,同样也可以使用如下命令来进行在线安装。
yum install autoconf
phpize在php的安装目录在php/bin目录下
依次运行完上面的命令后,就可以在/ext/hello/modules/目录中找到hello.so文件。这就是我们所编译出来的扩展文件,接下来把这个文件copy到/usr/local/lib/php/extensions目录下,然后在php.ini文件里添加
extension=hello.so
这样扩展就开发完毕。
接下来启动apache服务器。
可以选在命令行测试一下我们的扩展。
$ php -r 'echo hello_world();'
输出:
hello world!
虽然这个hello_world非常简单,如果你对开发php扩展有兴趣,但又无从下手,如果能顺利的完成这个例子,我想,你的信心一定会大增。
本来说今天12点早点休息。哎,这时间过的真快,想不到又是快到2点了。
机器人 2008-11-16 01:59 于 北京
还没研究过扩展呢,先做个记号
见笑了!!
占位,有时间慢慢品尝