php 5.6版本中编写一个PHP扩展的简单示例


Posted in PHP onJanuary 20, 2015

有时候在php本身没有满足需求的api时候,需要自己写相应的扩展,扩展写完之后进行编译,即可加入自己的开发环境中,扩展php的功能。

这里实现一个连接字符串和int型数的连接操作的简单扩展。

首先,下载最新的php源码安装包,进入ext/目录,新建extstrcat.def:

string extstrcat(string strarg, int intarg)

随后运行:
./ext_skel --extname=extstrcat --proto=extstrcat.def

修改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])

此时来编辑ext/extstrcat/extstrcat.c,找到PHP_FUNCTION(extstrcat)函数,这里表示扩展中的方法名为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, "extstract: not yet implemented");

}

,其中strarg和intarg即为对应的两个字符串和整型参数。
接下来要做的事情就是编译扩展,

phpize

./configure --enable-extstrcat

make

编译成功之后,在ext/modules目录下会生成extstrcat.so文件,
cp ./modules/extstrcat.so /usr/local/lib/php/extensions/no-debug-non-zts-20121212/

修改php.ini,增加extension = extstrcat.so。
重启php-fpm,运行phpinfo()可以看到新增了extstrcat扩展。
现在来写一个Demo,测试一下刚刚的php扩展,

<?php

if(!extension_loaded('extstrcat')) {

 dl('extstrcat.' . PHP_SHLIB_SUFFIX);

}

$ret=extstrcat('testarg',1234);

echo $ret;

?>

,命令行下运行该文件,得到testarg1234.
PHP 相关文章推荐
php生成EXCEL的东东
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
PHP 加密解密内部算法
Apr 22 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
php获取文件大小的方法
Feb 26 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
PHP函数extension_loaded()用法实例
Jan 19 #PHP
php使用正则表达式获取图片url的方法
Jan 16 #PHP
php使用CURL伪造IP和来源实例详解
Jan 15 #PHP
php+mysql实现无限分类实例详解
Jan 15 #PHP
php截取html字符串及自动补全html标签的方法
Jan 15 #PHP
php在linux下检测mysql同步状态的方法
Jan 15 #PHP
php中静态类与静态变量用法的区别分析
Jan 15 #PHP
You might like
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
理解Python中的绝对路径和相对路径
2017/08/30 Python
python 以16进制打印输出的方法
2018/07/09 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
心理健康心得体会
2014/01/02 职场文书
读书活动实施方案
2014/03/10 职场文书
项目经理聘任书
2014/03/29 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
工程承包协议书范本
2014/09/29 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2015年老干部工作总结
2015/04/23 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python