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 正则学习实例
Jul 30 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
基于PHP制作验证码
Oct 12 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 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页面缓存ob系列函数介绍
2012/10/18 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
JavaScript中的闭包
2016/02/24 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
JavaScript fetch接口案例解析
2018/08/30 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
python实现最长公共子序列
2018/05/22 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python中比较两个列表的实例方法
2019/07/04 Python
用Python解数独的方法示例
2019/10/24 Python
python manage.py runserver流程解析
2019/11/08 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
python实现logistic分类算法代码
2020/02/28 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
《恐龙》教学反思
2014/04/27 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
东京审判观后感
2015/06/01 职场文书
与死神共舞观后感
2015/06/15 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers