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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
PHP与SQL注入攻击[二]
Apr 17 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
PHP数据过滤的方法
Oct 30 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php header函数的常用http头设置
Jun 25 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
php生成HTML文件的类方法
Oct 11 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 三维饼图的实现代码
2008/09/28 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
javascript globalStorage类代码
2009/06/04 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
React中的refs的使用教程
2018/02/13 Javascript
js+css实现打字效果
2020/06/24 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
python实现数字炸弹游戏
2020/07/17 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
公司财务管理制度
2015/08/04 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫