几步创建您的php扩展

Posted by 机器人 on 16th 十一月 2008 in c/c++, linux/server

下面以开发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 于 北京

分享到: 新浪微博

3 Responses to “几步创建您的php扩展”

  1. blankyao 说:

    还没研究过扩展呢,先做个记号

  2. 小黑米 说:

    占位,有时间慢慢品尝

Leave a Reply