使用C语言编写PHP 5.5.4的扩展函数
来源:互联网 发布:特锐德网络 编辑:程序博客网 时间:2024/04/29 03:40
这两天用到了C语言写扩展PHP函数,将过程记录一下。
这里示例扩展了一个函数,它可以将字符串和整形变量连接起来,比如"hello"和1234连接成"hello1234"。
1.新建extstrcat.def,放到ext/目录下
string extstrcat(string strarg, int intarg)
2.新建extstrcattest.php,放到网站目录,它将作为测试页面
<?phpif(!extension_loaded('extstrcat')) {dl('extstrcat.' . PHP_SHLIB_SUFFIX);}$ret=extstrcat('testarg',1234);echo $ret;?>
3.创建扩展函数
cd ext/./ext_skel --extname=extstrcat --proto=extstrcat.def
4.修改ext/extstrcat/config.m4,去掉如下行前面的dnl
PHP_ARG_ENABLE(extstrcat, whether to enable extstrcat support,Make sure that the comment is aligned:[ --enable-extstrcat Enable extstrcat support])
5.编辑ext/extstrcat/extstrcat.c,找到PHP_FUNCTION(extstrcat)函数,编写具体的实现
PHP_FUNCTION(extstrcat){char *strarg = NULL;int argc = ZEND_NUM_ARGS();int strarg_len;long intarg;char intargstr[10];int retstrlen = 0;char *retstr = NULL;if (zend_parse_parameters(argc TSRMLS_CC, "sl", &strarg, &strarg_len, &intarg) == FAILURE) return;snprintf(intargstr, 9, "%d", intarg);retstrlen = strarg_len + strlen(intargstr) + 1;retstr = (char *)malloc(sizeof(char)* retstrlen);memset(retstr, '\0', retstrlen);strncat(retstr, strarg, strlen(strarg));strncat(retstr, intargstr, strlen(intargstr));RETURN_STRING(retstr, 1);php_error(E_WARNING, "extstrcat: not yet implemented");}
6.编译扩展代码
phpize./configure --enable-extstrcatmake
7.将生成的动态链接库extstrcat.so复制到PHP的模块目录
cp ./modules/extstrcat.so /usr/local/lib/php/extensions/no-debug-non-zts-20121212/
8.修改php.ini,增加extension = extstrcat.so
9.重启php-fpm,运行phpinfo()可以看到 extstrcat support enabled
10.打开http://127.0.0.1/extstrcattest.php,输出testarg1234,正确。
我实际给PHP扩展了一个自定义的TripleDES的加解密函数,这样PHP就可以解C语言客户端加密出来的数据了,也可以加密数据到C语言客户端解密。
- 使用C语言编写PHP 5.5.4的扩展函数
- 编写自己的php扩展函数(c)
- 如何用C语言编写PHP扩展的详解
- 编写PHP的C扩展
- 利用php调用C语言 扩展函数
- 利用php调用C语言 扩展函数
- 编写自己的php扩展函数(初级)
- 如何编写一个PHP的C扩展
- 用C编写你自己的php扩展
- 如何编写一个PHP的C扩展
- 使用C语言来扩展PHP,写PHP扩展dll
- 使用C语言来扩展PHP,写PHP扩展dll
- 扩展Python__在python脚本中使用其他语言(c/c++/java/c#)编写的模块
- 使用VS2010编写Python的C扩展
- 【PHP扩展开发必备】在PHP扩展中通过C语言调用PHP函数与方法
- 使用zend编写php扩展
- PHP编写扩展时的几个常用函数
- c/c++编写protobuf 对应的php扩展
- IOS动画Core Animation详解
- 国外知名IT网站Stackoverflow评选的最有影响力IT图书
- java基础——多线程(线程的同步互斥与通信)
- 存储XML格式数据的原理
- sql where 1=1和 0=1 的作用
- 使用C语言编写PHP 5.5.4的扩展函数
- 安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,跳到拨号界面
- ajax文件上传,采用ajaxfileupload插件
- 财务分析与决策——绪论
- Android Developers:使ListView滑动流畅
- 顺序表(c++版)
- 财务分析与决策——认识资产负债表(一)
- Android之菜单创建方式
- 工作交接给我是该高兴还是怎样