C语言linux环境下写php扩展

更多技术交流加群: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)

布尔数(10)

RETURN_NULL()

RETVAL_NULL()

NULL

RETURN_DOUBLE(d)

RETVAL_DOUBLE(d)

浮点数

RETURN_STRING(s, dup)

RETVAL_STRING(s, dup)

字符串。如果dup1,引擎会调用estrdup()重复s,使用拷贝。如果dup0,就使用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)

资源句柄。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值