PHP7扩展开发之hello word实现方法详解


Posted in PHP onJanuary 15, 2018

本文实例讲述了PHP7扩展开发之hello word实现方法。分享给大家供大家参考,具体如下:

这里是以PHP7作为基础,讲解如何从零开始创建一个PHP扩展。本文主要讲解创建一个扩展的基本步骤都有哪些。示例中,我们将实现如下功能:

<?php
echo say();
?>

输出内容:

$ php ./test.php
$ hello word

在扩展中实现一个say方法,调用say方法后,输出 hello word。

第一步:生成代码

PHP为我们提供了生成基本代码的工具 ext_skel。这个工具在PHP源代码的./ext目录下。

$ cd php_src/ext/
$ ./ext_skel --extname=say

extname参数的值就是扩展名称。执行ext_skel命令后,这样在当前目录下会生成一个与扩展名一样的目录。

第二步,修改config.m4配置文件

config.m4的作用就是配合phpize工具生成configure文件。configure文件是用于环境检测的。检测扩展编译运行所需的环境是否满足。现在我们开始修改config.m4文件。

$ cd ./say
$ vim ./config.m4

打开,config.m4文件后,你会发现这样一段文字。

dnl If your extension references something external, use with:
dnl PHP_ARG_WITH(say, for say support,
dnl Make sure that the comment is aligned:
dnl [ --with-say       Include say support])
dnl Otherwise use enable:
dnl PHP_ARG_ENABLE(say, whether to enable say support,
dnl Make sure that the comment is aligned:
dnl [ --enable-say      Enable say support])

其中,dnl 是注释符号。上面的代码说,如果你所编写的扩展如果依赖其它的扩展或者lib库,需要去掉PHP_ARG_WITH相关代码的注释。否则,去掉 PHP_ARG_ENABLE 相关代码段的注释。我们编写的扩展不需要依赖其他的扩展和lib库。因此,我们去掉PHP_ARG_ENABLE前面的注释。去掉注释后的代码如下:

dnl If your extension references something external, use with:
 dnl PHP_ARG_WITH(say, for say support,
 dnl Make sure that the comment is aligned:
 dnl [ --with-say       Include say support])
 dnl Otherwise use enable:
 PHP_ARG_ENABLE(say, whether to enable say support,
 Make sure that the comment is aligned:
 [ --enable-say      Enable say support])

第三步,代码实现

修改say.c文件。实现say方法。
找到PHP_FUNCTION(confirm_say_compiled),在其上面增加如下代码:

PHP_FUNCTION(say)
{
    zend_string *strg;
    strg = strpprintf(0, "hello word");
    RETURN_STR(strg);
}

找到 PHP_FE(confirm_say_compiled, 在上面增加如下代码:

PHP_FE(say, NULL)

修改后的代码如下:

const zend_function_entry say_functions[] = {
   PHP_FE(say, NULL)    /* For testing, remove later. */
   PHP_FE(confirm_say_compiled,  NULL)    /* For testing, remove later. */
   PHP_FE_END /* Must be the last line in say_functions[] */
 };
 /* }}} */

第四步,编译安装

编译扩展的步骤如下:

$ phpize
$ ./configure
$ make && make install

修改php.ini文件,增加如下代码:

[say]
extension = say.so

然后执行,php -m 命令。在输出的内容中,你会看到say字样。

第五步,调用测试

自己写一个脚本,调用say方法。看输出的内容是否符合预期。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
discuz安全提问算法
Jun 06 PHP
php获取某个目录大小的代码
Sep 10 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
PHP 根据key 给二维数组分组
Dec 09 PHP
Laravel框架之解决前端显示图片问题
Oct 24 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 PHP
Yii 框架使用Forms操作详解
May 18 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 #PHP
详解PHP序列化和反序列化原理
Jan 15 #PHP
PHP使用两个栈实现队列功能的方法
Jan 15 #PHP
php获取ajax的headers方法与内容实例
Dec 27 #PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 #PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 #PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 #PHP
You might like
ftp类(example.php)
2006/10/09 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
python实现识别相似图片小结
2016/02/22 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
numpy中的高维数组转置实例
2018/04/17 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
中国好声音广告词
2014/03/18 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
史上最牛辞职信
2015/05/13 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
新年寄语2016
2015/08/17 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
导游词之太湖
2019/10/08 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP