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 相关文章推荐
一个捕获函数输出的函数
Feb 14 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
php adodb操作mysql数据库
Mar 19 PHP
php error_log 函数的使用
Apr 13 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
php中全局变量global的使用演示代码
May 18 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
js实现广告漂浮效果的小例子
2013/07/02 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python读取网页内容的方法
2015/07/30 Python
python写日志文件操作类与应用示例
2019/07/01 Python
wxpython绘制圆角窗体
2019/11/18 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Django数据统计功能count()的使用
2020/11/30 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
双方协议书
2014/04/22 职场文书
精神文明单位申报材料
2014/05/02 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书