您的位置:首页 > 运维架构 > Linux

C语言linux环境下写php扩展

2016-11-24 16:55 302 查看
更多技术交流加群:242722019

 

Linux环境下用C语言写php扩展

一、   预定义

在任意目录下写一个文件,内容是希望定义的函数名以及参数:

列:假设在php源代码ext扩展目录下定义一个myfunctions.def





二、   用ext_skel脚本建立骨架

该脚本在php源代码的ext目录下,在ext目录下输入命令



在ext中生成一个叫myfunctions的目录



进入 myfunctions目录有以下几个文件



修改config.m4文件



把这3行前面的dnl去掉

修改myfunctions.c文件

找到刚才自定义的函数的位置

PHP_FUNCTION(add)

PHP_FUNCTION(self_concat)

对函数进行修改





三、   进行初始化



编译安装



配置成功会显示

 


最后编译安装 make && make install



将生成的myfunctions.so拷贝到php加载extension的目录下



在php.ini中加载扩展



检查是否有myfunctions扩展



重启apache 查看phpinfo中是否有加载myfunctions扩展



最后在php文件测试函数是否成功

 




从PHP函数中返回值
扩展API包含丰富的用于从函数中返回值的宏。这些宏有两种主要风格:第一种是RETVAL_type()形式,它设置了返回值但C代码继续执行。这通常使用在把控制交给脚本引擎前还希望做的一些清理工作的时候使用,然后再使用C的返回声明
”return” 返回到PHP;后一个宏更加普遍,其形式是RETURN_type(),他设置了返回类型,同时返回控制到PHP。下表解释了大多数存在的宏。
设置返回值并且结束函数
设置返回值
宏返回类型和参数
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)
字符串。如果dup为1,引擎会调用estrdup()重复s,使用拷贝。如果dup为0,就使用s
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)
资源句柄。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息