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 相关文章推荐
php仿ZOL分页类代码
Oct 02 PHP
php explode函数实例代码
Feb 27 PHP
使用php实现截取指定长度
Aug 06 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
php实现的单一入口应用程序实例分析
Sep 23 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
PDO::quote讲解
Jan 29 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
php使用pecl方式安装扩展操作示例
Aug 12 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
扩展你的 PHP 之入门篇
2006/12/04 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
python写入中英文字符串到文件的方法
2015/05/06 Python
详解Python进程间通信之命名管道
2017/08/28 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
数控技校生自我鉴定
2014/03/02 职场文书
社团活动总结范文
2014/04/26 职场文书
介绍信怎么写
2015/01/30 职场文书
督导岗位职责
2015/02/04 职场文书
会议通知范文
2015/04/15 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
mysql 索引合并的使用
2021/08/30 MySQL