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录入页面中动态从数据库中提取数据的实现
Oct 09 PHP
PHP 文件上传全攻略
Apr 28 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
php网站地图生成类示例
Jan 13 PHP
php+highchats生成动态统计图
May 21 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP学习之正则表达式
2011/04/17 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
js文件缓存之版本管理详解
2013/07/05 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
js获取和设置属性的方法
2014/02/20 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
python随机数分布random测试
2018/08/27 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
python上selenium的弹框操作实现
2020/07/13 Python
python 对xml解析的示例
2021/02/27 Python
xxx同志考察材料
2014/02/07 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
文员求职信
2014/07/15 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
导游词范文
2015/02/13 职场文书
《山中访友》教学反思
2016/02/24 职场文书
Redis可视化客户端小结
2021/06/10 Redis
oracle重置序列从0开始递增1
2022/02/28 Oracle
使用Redis实现分布式锁的方法
2022/06/16 Redis