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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
PHP 中执行系统外部命令
Oct 09 PHP
一些常用的php函数
Dec 06 PHP
php header功能的使用
Oct 28 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
PHP中的一些常用函数收集
May 26 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
Yii 框架使用Forms操作详解
May 18 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安装为Apache DSO
2006/10/09 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
Python实用日期时间处理方法汇总
2015/05/09 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
python 如何设置守护进程
2020/10/29 Python
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
优秀求职自荐信怎样写
2013/12/18 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
大学校园活动策划书
2014/02/04 职场文书
人事任命书怎么写
2014/06/05 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
税务会计岗位职责
2015/04/02 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
蜗居观后感
2015/06/11 职场文书