初步介绍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合并两个数组的两种方式的异同
Sep 14 PHP
PHP函数之日期时间函数date()使用详解
Sep 09 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
php实现面包屑导航例子分享
Dec 19 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
PHP命名空间定义与用法实例分析
Aug 14 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插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
数据员岗位职责
2013/11/19 职场文书
学术会议邀请函范文
2014/01/22 职场文书
优秀干部获奖感言
2014/01/31 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
银行转正自我鉴定
2014/09/29 职场文书
个人债务授权委托书
2014/10/17 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
mysql创建存储过程及函数详解
2021/12/04 MySQL