初步介绍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写的基于Memcache的Queue实现代码
Nov 27 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
PHP基础知识介绍
Sep 17 PHP
php时区转换转换函数
Jan 07 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
浅谈PHP中的
2016/04/23 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
Python操作SQLite数据库的方法详解
2017/06/16 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
劳资专员岗位职责
2013/12/27 职场文书
通信生自我鉴定
2014/01/18 职场文书
学生会主席演讲稿
2014/04/25 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
企业法人代表证明书
2014/09/27 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers