php扩展开发之hello world
最近在公司做的事情就是php扩展开发,虽然我只负责c++代码的编写,但是了解扩展开发的流程还是很有必要的。
(本文介绍的是动态扩展,对静态扩展有兴趣的读者可自行google)
php扩展开发环境搭建可参考:
CentOS安装配置nginx和php
假设我们需要增加一个函数echodemo_string,对应的php代码如下:
function echodemo_string($param) {
$result = "your input is $param";
return $result;
}
1. 创建扩展框架
这里要用到一个工具:ext_skel,它位于php源码目录的ext目录下。
假设扩展的名字为echodemo。
首先进入ext目录,
创建文件echodemo.skel,编辑文件内容
string echodemo_string(string param)
然后执行:
./ext_skel --extname=echodemo --proto=echodemo.skel
执行完毕会生成 echodemo 目录,目录包含如下内容:

2. 修改配置
打开config.m4,将第10、11、12行前面的dnl去掉,dnl表示注释。

3. 实现功能
打开echodemo.c,echodemo_string函数定义如下:

修改该函数实现我们需要的功能,最终实现如下:

(vim主题太丑了,我得换换。。。)
4. 编译安装扩展
这里需要用到phpize生成configure文件,在我的机器上,phpize位于/usr/local/php/bin目录。
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
当出现 "Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/",表示新的扩展 echodemo.so 已经安装完成。
此时还需要做的一件事就是修改 php.ini 文件。
不知道 php.ini 文件在哪?直接 php -i | grep php.ini 。我的在 /usr/local/php/lib 目录下。
文件末尾追加一行:
extension=echodemo.so
5. 验证安装
重启php-fpm:service php-fpm restart,
检查扩展是否加载:
php -m | grep echodemo
如果顺利,终端会输出 echodemo。
检查扩展代码是否正确:
php -r "echo echodemo_string('hello world');"
注意,我外部用的双引号,函数参数用的单引号,这是为了避免一些转义错误。
参考资料:
PHP扩展开发:第一个扩展
Linux 下PHP扩展开发系列:二. 一个典型的扩展开发
最后配张图:

php扩展开发之hello world的更多相关文章
- PHP扩展开发之PHP的启动与终止
PHP程序的启动可以看做是两个概念上的启动,终止也有两个概念上的终止.其中一个是PHP作为Apache(拿它举例,板砖勿扔)的一个模块的启动与终止, 这次启动php会初始化一些必要数据,比如与宿主Ap ...
- PHP 扩展开发之Zephir
最近对代码进行性能分析后,发现两个耗时的地方:自动加载文件数太多:参数验证函数调用超过1000次.这也是许多php语言框架面临的问题,所以发展出来诸如Yaf,Swoole,Phalcon这些C语言扩展 ...
- 一次失败的PHP扩展开发之旅
一次失败的PHP扩展开发之旅 By warezhou 2014.11.19 缘起 经过不断的持续迭代.我们部门的协程版网络框架(CoSvrFrame)最终出炉了!这本来是件喜大普奔的事情.可是随着新业 ...
- Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
- Android混合开发之WebView使用总结
前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...
- Android Studio快速开发之道
概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...
- Cocos2d-x 3.x游戏开发之旅
Cocos2d-x 3.x游戏开发之旅 钟迪龙 著 ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...
- DarkStone - 跨平台移动应用开发之 Flex 的崛起
我的好友Ds 发布一个flex的消息.我帮忙转发 DarkStone - 跨平台移动应用开发之 Flex 的崛起 (2013-08-20 22:28:32) 此文章由 周戈 (DarkSton ...
- 【转载】浅谈游戏开发之2D手游工具
浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android 程序设计: 其它 编程语言: 引擎/SDK ...
随机推荐
- http的请求头都有那些信息
每个HTTP请求和响应都会带有相应的头部信息.默认情况下,在发送XHR请求的同时,还会发送下列头部信息: Accept:浏览器能够处理的内容类型 Accept-Charset:浏览器能够显示的字符集 ...
- web 应用 为啥 需要用到 tomcat 之类的 部署
首先了解C/s架构 比如我们常见的QQ,魔兽世界等 这种结构的程序是有服务器来提供服务的,客户端来使用服务 而B/S架构是这样的 它不需要安装客户端,只需要浏览器就可以了 例如QQ农场,这样对客户端的 ...
- C语言冒泡排序法分析及代码实现
冒泡排序法: 所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法.具体方法是,相邻数值两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换( ...
- Android Them+SharedPreferences 修改程序所有view字体颜色、大小和页面背景
有这么一个需求,可以对页面的样式进行选择,然后根据选择改变程序所有字体颜色和页面背景.同时下一次启动程序,当前设置依然有效. 根据需求,我们需要一种快速,方便,有效的方式来实现需求,然后可以通过And ...
- labview 机器视觉
学习labview机器视觉,一定要安装VAS,VDM.先安装labview,再安装VAS和VDM. 安装完成后,前面板出现vision 后面板出现视觉与运动函数
- 借助Python来实现的定量城市研究
一.数据处理基础 (一)数据分析的概念 城市数据分析,可以从数据分析的广义和狭义两个角度来看: 狭义的数据分析是指根据分析目的,采用对比分析.分组分析.交叉分析和回归分析等分析方法,对相关城市数据(包 ...
- work of 12/30/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 merge UI 与reader 6 丰富re ...
- HPU第一次团队赛
D. Tom的战力问题 Tom被斯派克揍了TAT.Tom下定决心要战胜斯派克.但是在战胜最强的斯派克之前,Tom要先打败其他的狗.为此,他打算先收集一下信息.现在Tom在了得到了一些关于战斗力的小道消 ...
- python3购物车
python3实现购物车小程序,优化后将程序分成函数,用文件注册和验证用户名密码. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 20 ...
- Flair:一款简单但技术先进的NLP库
过去的几年里,在NLP(自然语言处理)领域,我们已经见证了多项令人难以置信的突破,如ULMFiT.ELMo.Facebook的PyText以及谷歌的BERT等等. 这些技术大大推进了NLP的前沿性研究 ...