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 相关文章推荐
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
10 个经典PHP函数
Oct 17 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
php伪静态之APACHE篇
Jun 02 PHP
php上传文件问题汇总
Jan 30 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 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实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
php单例模式示例分享
2015/02/12 PHP
List Installed Software Features
2007/06/11 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
js window.onload 加载多个函数的方法
2009/11/02 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
CSMA/CD介质访问控制协议
2015/11/17 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
大学生村官工作感言
2014/01/10 职场文书
学校募捐倡议书
2014/05/14 职场文书
个人总结与自我评价
2014/09/18 职场文书
自荐信格式模板
2015/03/27 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL