ubuntu12.04使用c编写php扩展模块教程分享


Posted in PHP onDecember 25, 2013

系统是ubuntu 12.04,已经安装好了apache和php,php的版本是5.3.10。

以下操作如果碰到权限方面的问题,建议切换成root操作。

1、下载源码

签出php 5.3.10的源代码

$ svn checkout https://svn.php.net/repository/php/php-src/branches/PHP_5_3_10/

Tips:如果没有这个命令,需要先安装svn,在ubuntu下直接使用apt-get安装就OK了:

$ sudo apt-get install subversion

关于php源码,如需要了解更多信息,可以查看php维基中关于svn的说明:https://wiki.php.net/vcs/svnfaq

2、创建模块

a、源码签出完毕后,进入源码ext目录,先用ext_skel创建一个模块, 模块名为my:

$ ./ext_skel --extname=my

b、进入my模块:

$ cd my

c、修改config.m4文件,找到如下内容:

dnl PHP_ARG_WITH(my, for my support,
dnl Make sure that the comment is aligned:
dnl [  --with-my             Include my support])

将前面的dnl去除,最后如下:

PHP_ARG_WITH(my, for my support,
Make sure that the comment is aligned:
[  --with-my             Include my support])

然后保存文件。

Tips:如果需要测试下修改是否正确,可以使用php my.php来测试下:

$ php my.php
confirm_my_compiled
Congratulations! You have successfully modified ext/my/config.m4. Module my is now compiled into PHP.

上面confirm_my_compiled就是模块默认的函数,后面将该模块加载后,就可以调用这个函数了。

3、编译模块

还是在my模块的目录下执行下面命令:

$ phpize
$ ./configure
$ make
$ make install

编译成功后,会提示这样的信息:

Installing shared extensions: /usr/lib/php5/20090626+lfs/

表示模块已经编译完成,并且复制到php模块目录了。

Tips:如果phpize命令没有找到,需要安装下php5-dev,在ubuntu下直接使用apt-get安装就OK了。

$ apt-get install php5-dev

4、加载模块

编辑文件:

$ vim /etc/php5/conf.d/my.ini

增加如下内容,表示加载my.so模块,然后保存。

extension=my.so

重新启动apache

$ /etc/init.d/apache2 restart

在web环境下,可以用phpinfo看看是否加载my模块了。终端可以使用php -i | less查看。

5、编写测试程序

如果上面都执行顺利,那么my模块就加载进来了,my模块的默认的一个方法confirm_my_compiled也就可以调用了。编写php测试文件:

echo confirm_my_compiled("Hello");

执行测试文件,如果看到下面的输出,那么就成功了。

Congratulations! You have successfully modified ext/my/config.m4. Module Hello is now compiled into PHP.
PHP 相关文章推荐
PHP安装全攻略:APACHE
Oct 09 PHP
PHP 数字左侧自动补0
Mar 31 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
php数据访问之查询关键字
May 09 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 PHP
php中apc缓存使用示例
Dec 25 #PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 #PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 #PHP
zend framework文件上传功能实例代码
Dec 25 #PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 #PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 #PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 #PHP
You might like
PHP令牌 Token改进版
2008/07/18 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
laravel自定义分页效果
2017/07/23 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
个人教师自我评价范文
2013/12/02 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
董事长助理岗位职责
2015/02/11 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
安全守法证明
2015/06/23 职场文书
2019同学聚会主持词
2019/05/06 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Echarts如何重新渲染实例详解
2022/05/30 Javascript