初步介绍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 开发环境配置(Zend Server安装)
Apr 28 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
php线性表的入栈与出栈实例分析
Jun 12 PHP
PHP导出Excel实例讲解
Jan 24 PHP
初识ThinkPHP控制器
Apr 07 PHP
PHP大神的十大优良习惯
Sep 14 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
CI框架表单验证实例详解
Nov 21 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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批量上传的实现代码
2013/06/09 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
python导出hive数据表的schema实例代码
2018/01/22 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
Python常用的json标准库
2019/02/19 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
Pytorch中.new()的作用详解
2020/02/18 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
校园环保标语
2014/06/13 职场文书
党员三严三实心得体会
2014/10/13 职场文书
企业年检委托书范本
2014/10/14 职场文书
签订劳动合同通知书
2015/04/16 职场文书
同学聚会感言一句话
2015/07/30 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python