初步介绍PHP扩展开发经验分享


Posted in PHP onSeptember 06, 2012

环境:PHP 5.2.14 CentOS 5.5

第一步:建立扩展骨架

cd php-5.2.14/ext
./ext_skel ?extname=laiwenhui

第二步:修改编译参数

cd php-5.2.14/ext/laiwenhui
vi config.m4

去掉

PHP_ARG_ENABLE(laiwenhui, whether to enable laiwenhui support,

[ --enable-laiwenhui Enable laiwenhui support])

两行前面的dnl

修改后为:

dnl Otherwise use enable: 
PHP_ARG_ENABLE(laiwenhui, whether to enable laiwenhui support, 
dnl Make sure that the comment is aligned: 
[ --enable-laiwenhui Enable laiwenhui support])

第三步:编写代码

vim php_laiwenhui.h

在 PHP_FUNCTION(confirm_laiwenhui_compiled); 后面新增一行:PHP_FUNCTION(test);

添加后为:

PHP_FUNCTION(confirm_laiwenhui_compiled); /* For testing, remove later. */
PHP_FUNCTION(test);

然后

vim laiwenhui.c

在PHP_FE(confirm_laiwenhui_compiled, NULL) 后面添加 PHP_FE(test, NULL)

添加后为:

zend_function_entry laiwenhui_functions[] = { 
PHP_FE(confirm_laiwenhui_compiled, NULL) /* For testing, remove later. */ 
PHP_FE(test, NULL) /* For testing, remove later. */ 
{NULL, NULL, NULL} /* Must be the last line in laiwenhui_functions[] */ 
};

在文件最后面增加如下代码:
PHP_FUNCTION(test) 
{ 
char *arg = “This my first extention!”; 
int len; 
char *strg; 
len = spprintf(&strg, 0, “%s\n”, arg); 
RETURN_STRINGL(strg, len, 0); 
}

第四步:编译代码
cd php-5.2.6/ext/laiwenhui 
/opt/module/php/bin/phpize 
./configure ?with-php-config=/opt/module/php/bin/php-config 
make 
make install

我的PHP安装路径为:/opt/module/php
这个时候会生成一个文件 /opt/module/php/lib/php/extensions/no-debug-non-zts-20060613/laiwenhui.so

编辑PHP配置文件php.ini,添加扩展:

vim php.ini

在[PHP]模块下增加:extension = laiwenhui.so

;extension=php_zip.dll
extension = laiwenhui.so

把php.ini 文件中的 extension_dir 修改为该目录:
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/”

; Directory in which the loadable extensions (modules) reside.
extension_dir = “/opt/module/php/lib/php/extensions/no-debug-non-zts-20060613/”

第五步:检查安装结果

1. 重启apache或者php-fpm
2. /opt/module/php/bin/php -m 看下是否有包含laiwenhui扩展。
第六步:执行测试代码

在网站根目录创建test.php

vim test.php

代码内容如下

<?php
echo test();
?>

执行后结果为:This my first extention!

如果你能顺利完成以上几步,恭喜你完成了第一个扩展。

以上是扩展PHP的简单步骤,更多请参考:

PHP 相关文章推荐
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
CURL状态码列表(详细)
Jun 27 PHP
php中opendir函数用法实例
Nov 15 PHP
php检测图片主要颜色的方法
Jul 01 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
解决php扩展安装不生效问题
Oct 25 PHP
php写的带缓存数据功能的mysqli类
Sep 06 #PHP
一个PHP并发访问实例代码
Sep 06 #PHP
PHP连接MongoDB示例代码
Sep 06 #PHP
谨慎使用PHP的引用原因分析
Sep 06 #PHP
很让人受教的 提高php代码质量36计
Sep 05 #PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 #PHP
三个类概括PHP的五种设计模式
Sep 05 #PHP
You might like
PHP环境搭建最新方法
2006/09/05 PHP
php header Content-Type类型小结
2011/07/03 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
详解python 爬取12306验证码
2019/05/10 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
python实现拼接图片
2020/03/23 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
荷兰本土平价百货:HEMA
2017/10/23 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
论文答辩开场白大全
2015/05/27 职场文书
Python绘制分类图的方法
2021/04/20 Python
MySQL 查询速度慢的原因
2021/05/25 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL