注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

技术行者

时代的车轮在按照摩尔定律滚动。

 
 
 

日志

 
 

Linux下编写PHP拓展的方法  

2012-02-27 20:59:00|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1. 生成拓展

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

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

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

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

编译的时候,选择的模式

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

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

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

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

 

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拓展的方法 - hansionxu - 技术的天空
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拓展的方法 - hansionxu - 技术的天空

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

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

[PHP Modules]

world

 

4.验证模块

<?php

echo confirm_world_compiled(world);

?>

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

 

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


5. 绿色加载的拓展

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


 

  评论这张
 
阅读(387)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017