C语言linux环境下写php扩展
2016-11-24 16:55
302 查看
更多技术交流加群:242722019
Linux环境下用C语言写php扩展
一、 预定义
在任意目录下写一个文件,内容是希望定义的函数名以及参数:
列:假设在php源代码ext扩展目录下定义一个myfunctions.def
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9871525baa7144d668f3472ca1385697)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/91be754a6d910ef6b5f51afbb8851b9a)
二、 用ext_skel脚本建立骨架
该脚本在php源代码的ext目录下,在ext目录下输入命令
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a2b4b2664dd949914911c153061fb535)
在ext中生成一个叫myfunctions的目录
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9c435a94aafb4dc6ae9f4f0c1a0a09c0)
进入 myfunctions目录有以下几个文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/5f2057d7420a6dd09908788a91ea3bd2)
修改config.m4文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/ffca37bc509f2b13979074a47aadc733)
把这3行前面的dnl去掉
修改myfunctions.c文件
找到刚才自定义的函数的位置
PHP_FUNCTION(add)
PHP_FUNCTION(self_concat)
对函数进行修改
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/f73ec906c2bc55aac628ce1620239811)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/cc701880a885ef89e85be4478171e8e8)
三、 进行初始化
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/7cb040c5ef4ee870cea60502df5061a9)
编译安装
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/5cf7ec844589e97156686c7b3df6ee79)
配置成功会显示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/48db791d12474a8237476b73b7a8ab57)
最后编译安装 make && make install
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a61ae3bca60451b87cbef199ea521cdc)
将生成的myfunctions.so拷贝到php加载extension的目录下
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/ee2fdbf64c198a5c1b405fcbb1b503de)
在php.ini中加载扩展
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/712ed7b2e518b9876d35d8bb1cbb22e9)
检查是否有myfunctions扩展
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/b649552311eeacb08db148b202636861)
重启apache 查看phpinfo中是否有加载myfunctions扩展
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/b1506953c2aa5aa5cf86a8b6fef1ba4e)
最后在php文件测试函数是否成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/fdc65bec711e8558f979c70f64b9d09d)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/2af0f1523e69ea6de45efd968a6eea4a)
从PHP函数中返回值
扩展API包含丰富的用于从函数中返回值的宏。这些宏有两种主要风格:第一种是RETVAL_type()形式,它设置了返回值但C代码继续执行。这通常使用在把控制交给脚本引擎前还希望做的一些清理工作的时候使用,然后再使用C的返回声明
”return” 返回到PHP;后一个宏更加普遍,其形式是RETURN_type(),他设置了返回类型,同时返回控制到PHP。下表解释了大多数存在的宏。
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) | 资源句柄。 |
相关文章推荐
- linux下 C语言对 php 扩展
- Linux环境下不重新编译php添加扩展模块
- linux环境下在php中添加mongoDB扩展
- Linux环境安装phpredis扩展
- 用C语言写PHP扩展 linux
- Linux环境FastDFS分布式文件系统及PHP扩展库的安装与配置
- Linux-FreeBSD下用C语言开发PHP的so扩展模块例解
- linux环境编译安装php的扩展
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- Linux 下安装 Memcached 和 PHP 开启 Memcached 扩展 及 LAMP 环境的安装
- Linux下C语言对PHP扩展
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- 64位Linux环境安装PHP TCC 扩展方法
- linux环境下安装php扩展
- linux下 C语言对 php 扩展
- linux下 C语言对 php 扩展
- 用C语言写PHP扩展 linux
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- LINUX环境下编写php扩展
- php扩展和嵌入--如何在linux下配置LAMP环境