Linux下编写PHP拓展的方法

1. 生成拓展

进入源代码包的ext目录:php-5.2.17/ext

./ext_skel --extname=world(例如,我们编写一个world名字的拓展)

Linux下编写PHP拓展的方法_第1张图片

修改config.m4  vi ext/world/config.m4

编译的时候,选择的模式

(文件中的dnl表示注释的意思,去掉dnl和最后的那个括号,否则编译会报错的)

dnl [  --with-world             Include world support])

dnl [  --enable-world           Enable world support])

Linux下编写PHP拓展的方法_第2张图片

 

2. 给world拓展定义函数的方法(使用例子里自己生成的来做哈)

在ext/world/php_world.h头文件里,定义函数声明(和C语言一样)

PHP_FUNCTION(confirm_world_compiled);

 

进入到ext/world/world.c程序文件中

zend_function_entry world_functions[] 这里面添加函数的信息。

Linux下编写PHP拓展的方法 - hansionxu - 技术的天空

函数体:(PHP_FUNCTION,这个函数只是一个简单的输出功能)

Linux下编写PHP拓展的方法_第3张图片
zend_parse_parameters,用来获取函数的传参并且检查。

传递两个参数的写法:

zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &r1, &n, &r2, &m) == FAILURE 

传参数的分类:

l     long     符号整数
d     double     浮点数
s     char *, int     二进制字符串,长度
b     zend_bool     逻辑型(1或0)
r     zval *     资源(文件指针,数据库连接等)
a     zval *     联合数组
o     zval *     任何类型的对象
O     zval *     指定类型的对象。需要提供目标对象的类类型
z     zval *     无任何操作的zval

返回值的分类:

RETURN_LONG(l)       RETVAL_LONG(l)      整数
RETURN_BOOL(b)     RETVAL_BOOL(b)     布尔数(1或0)
RETURN_NULL()        RETVAL_NULL()         NULL
RETURN_DOUBLE(d)     RETVAL_DOUBLE(d)     浮点数
RETURN_STRING(s, dup)     RETVAL_STRING(s, dup)     字符串
RETURN_STRINGL(s, l, dup)     RETVAL_STRINGL(s, l, dup)     长度为l的字符串值。与上一个宏一样,但因为s的长度被指定,所以速度更快。
RETURN_TRUE     RETVAL_TRUE     返回布尔值true。注意到这个宏没有括号。
RETURN_FALSE     RETVAL_FALSE     返回布尔值false。注意到这个宏没有括号。
RETURN_RESOURCE(r)     RETVAL_RESOURCE(r)     资源句柄。

 

3. 编译函数

./buildconf --force(重新编译configure文件)

./configure --prefix=/home/admin/php --with-world

编译后:

Linux下编写PHP拓展的方法_第4张图片

执行make test进行功能回归,看看新增的拓展是否会影响原来的功能。

make && make install
查看php -m,看见拓展已经被安装

[PHP Modules]

world

 

4.验证模块

echo confirm_world_compiled(world);

?>

Linux下编写PHP拓展的方法 - hansionxu - 技术的天空

 

恭喜你,拓展安装成功了哈。


5. 绿色加载的拓展

Linux下编写PHP拓展的方法_第5张图片


 

你可能感兴趣的:(PHP)