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 相关文章推荐
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
php检测图片主要颜色的方法
Jul 01 PHP
PHP递归创建多级目录
Nov 05 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
PHP目录操作实例总结
Sep 27 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
php微信公众号开发之欢迎老朋友
Oct 20 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与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
房屋租赁意向书
2014/04/01 职场文书
北京申奥口号
2014/06/19 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
nginx访问报403错误的几种情况详解
2022/07/23 Servers