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伪静态写法附代码
Jun 20 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
php中hashtable实现示例分享
Feb 13 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
Laravel数据库读写分离配置的方法
Oct 13 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正则表达式入门教程(推荐)
2016/05/18 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
用python实现的线程池实例代码
2018/01/06 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
女大学生自我鉴定
2013/12/09 职场文书
个人求职信范文分享
2013/12/13 职场文书
学校中秋节活动总结
2015/03/23 职场文书
投标售后服务承诺书
2015/04/29 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书