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 相关文章推荐
ftp类(example.php)
Oct 09 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
php网页病毒清除类
Dec 08 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
万能的php分页类
Jul 06 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
PHP4.04简明安装
2006/10/09 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
2019 Python最新面试题及答案16道题
2019/04/11 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
土木工程专业大学毕业生求职信
2013/10/13 职场文书
销售工作岗位职责
2013/12/24 职场文书
单位人事专员介绍信
2014/01/11 职场文书
上班上网检讨书
2014/01/29 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
大型营销活动计划书
2014/04/28 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
暖春观后感
2015/06/08 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python