全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

PHP7扩展开发教程之Hello World实现方法示例

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

一、下载PHP源代码

要开发PHP扩展,需要先下载PHP的源代码,一方面是因为我们的扩展一般会用到PHP自身定义的函数和宏,另一方面我们可以利用官方提供的工具减少工作量。

我下载了PHP-7.0.2,地址是:http://cn2.php.net/get/php-7.0.2.tar.gz。

解压源码压缩包, tar xzf php-7.0.2.tar.gz,我们现在只需要关注Zend和ext这两个目录。

Zend目录里面包含了PHP的Zend Engine源代码,有些函数和宏的定义我们需要在这里面简单地看一下。

ext目录里面包含了PHP原生的扩展,以及我们开发自己的扩展时可以利用的工具,Linux下使用ext_skel,Windows下使用ext_skel_win32.php

二、使用ext_skel工具

我们可以在ext目录下看到所有的PHP原生扩展,其中包括了熟悉的curl,json,mbstring,simplexml,sockets等扩展,还有很多没有用过甚至没有听说过的扩展,不用在意这些,我们先打开我们最熟悉的curl来看看,有config.m4配置文件,有php_curl.h,curl_file.c等源代码,还有一些中间文件,最后还有一个tests目录,里面放的curl扩展的单元测试。重点关注config.m4,php_curl.h,curl_file.c即可,最简单的场景下这三个文件就是一个扩展的全部组成部分了。

打开随便看一下,不算太复杂,但是自己写一个类似的还是挺头疼的,这时就需要用到我前面提到的ext_skel工具了。这个工具也在ext目录下,我们执行一下,./ext_skel --help,可以看到若干参数,我们用到的只有--extname=module,这里填上自己开发的扩展名称。想深入了解各个参数的作用可以看这里:http://php.net/manual/en/internals2.buildsys.skeleton.php

./ext_skel --extname=hello

ext目录下多了一个hello目录,我们后续的工作都在这个目录下面,工具已经为我们自动生成了一些文件。

config.m4配置文件

开发PHP扩展,在写C代码之前,要先配置一下这里。我们打开可以看到详细的注释说明,dnl是注释语法。

如果你的扩展用到了外部依赖,就配置--with-hello选项,否则配置--enable-hello选项,删除这下面3行的del注释

PHP_ARG_ENABLE(hello, whether to enable hello support,
Make sure that the comment is aligned:
[ --enable-hello      Enable hello support])

PHP_ARG_WITH和PHP_ARG_ENABLE这两个宏用来配置configure选项,一个配置需要外部依赖的,另一个配置不需要外部依赖的

配置好的内容,在后面执行configure --help时可以看到。

php_hello.h头文件

类似于C语音的头文件,包含了一些自定义的结构和函数声明,在这个demo中暂时不需要改动

hello.c代码文件

真正的逻辑代码都在这个文件中,后面会详细介绍。

三、编写代码

好了,到这一步我们终于要开始写代码了,打开hello.c文件。

整个扩展的入口是zend_module_entry这个结构,具体的定义可以在Zend目录下的zend_modules.h文件中看到,一共有十几个属性,快速跳过,我们暂时只需要"hello world"。

zend_module_entry hello_module_entry = {
  STANDARD_MODULE_HEADER,
  "hello",
  hello_functions,
  PHP_MINIT(hello),
  PHP_MSHUTDOWN(hello),
  PHP_RINIT(hello),    /* Replace with NULL if there's nothing to do at request start */
  PHP_RSHUTDOWN(hello),  /* Replace with NULL if there's nothing to do at request end */
  PHP_MINFO(hello),
  PHP_HELLO_VERSION,
  STANDARD_MODULE_PROPERTIES
};

STANDARD_MODULE_HEADER帮我们实现了前面6个属性

"hello"是扩展的名字

hello_functions是扩展包含的全部方法的集合

后面5个宏分别代表5个扩展特定方法

PHP_HELLO_VERSION是扩展的版本号,定义在头文件中

STANDARD_MODULE_PROPERTIES帮我们实现了剩下的属性

暂时都不需要修改,知道这是一个入口就行。顺着这个入口,我们继续看怎么给扩展添加方法,在hello_functions[]方法数组中已经有了一个示例方法confirm_hello_compiled,我们参考它写我们的方法hello_world

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

先在扩展的方法数组中添加上hello_world,然后再定义hello_world。找到confirm_hello_compiled方法定义的地方,在它下面依葫芦画瓢,php_printf是Zend Engine中的printf方法。

PHP_FUNCTION(hello_world)
{
  php_printf("Hello World!\n");
  RETURN_TRUE;
}

四、编译安装

最后就是编译安装我们的扩展了,安装过PHP扩展的同学不用看,没有经验的可以参考一下。

phpize

./configure
make
make install

现在PHP的扩展目录中已经有了hello.so这个文件,在php.ini中添加上扩展的配置

extension = hello.so

五、测试

写一个test.php方法,执行脚本就可以看到"Hello World!"

<?php
hello_world();

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP扩展开发教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》

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


# PHP7  # 扩展  # 开发  # Hello  # World  # PHP扩展开发教程(总结)  # PHP扩展开发入门教程  # PHP内核介绍及扩展开发指南—基础知识  # 初步介绍PHP扩展开发经验分享  # PHP7扩展开发之基于函数方式使用lib库的方法详解  # PHP7扩展开发之hello word实现方法详解  # 快速开发一个PHP扩展图文教程  # 详解Window7 下开发php扩展  # 一个简单php扩展介绍与开发教程  # 关于尝试开发PHP的MYSQL扩展的使用  # windows下开发并编译PHP扩展的方法  # php扩展开发入门demo示例  # 源代码  # 可以看到  # 目录下  # 都在  # 不需要  # 这两个  # 头文件  # 只需要  # 看一下  # 已经有了  # 包含了  # 可以利用  # 程序设计  # 配置文件  # 自己的  # 组中  # 实现了  # 依葫芦画瓢  # 是因为  # 好了 


相关文章: 常州自助建站工具推荐:低成本搭建与模板选择技巧  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何通过IIS搭建网站并配置访问权限?  高防服务器租用指南:配置选择与快速部署攻略  如何挑选最适合建站的高性能VPS主机?  宝塔建站助手安装配置与建站模板使用全流程解析  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  c# 在高并发场景下,委托和接口调用的性能对比  如何快速搭建高效WAP手机网站?  建站主机功能解析:服务器选择与快速搭建指南  定制建站价位费用解析与套餐推荐全攻略  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  建站之星CMS五站合一模板配置与SEO优化指南  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  网站制作网站,深圳做网站哪家比较好?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  高性价比服务器租赁——企业级配置与24小时运维服务  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在宝塔面板中修改默认建站目录?  如何通过wdcp面板快速创建网站?  如何在新浪SAE免费搭建个人博客?  西安大型网站制作公司,西安招聘网站最好的是哪个?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  简历在线制作网站免费版,如何创建个人简历?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何快速完成中国万网建站详细流程?  建站之星代理费用多少?最新价格详情介绍  如何在云主机上快速搭建网站?  IOS倒计时设置UIButton标题title的抖动问题  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  建站之星多图banner生成与模板自定义指南  定制建站是什么?如何实现个性化需求?  制作网站怎么制作,*游戏网站怎么搭建?  如何用低价快速搭建高质量网站?  如何在IIS中新建站点并配置端口与物理路径?  如何在橙子建站上传落地页?操作指南详解  建站为何优先选择香港服务器?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何规划企业建站流程的关键步骤?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何快速生成可下载的建站源码工具?  表情包在线制作网站免费,表情包怎么弄?  建站主机解析:虚拟主机配置与服务器选择指南  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何选择域名并搭建高效网站?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  MySQL查询结果复制到新表的方法(更新、插入)  大连 网站制作,大连天途有线官网?  岳西云建站教程与模板下载_一站式快速建站系统操作指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。