初步介绍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新手上路(二)
Oct 09 PHP
PHP 工厂模式使用方法
May 18 PHP
第二章 PHP入门基础之php代码写法
Dec 30 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
php的ZipArchive类用法实例
Oct 20 PHP
thinkphp循环结构用法实例
Nov 24 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
twig模板常用语句实例小结
Feb 04 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
php表单习惯用的正则表达式
Oct 11 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 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/10/09 PHP
一个捕获函数输出的函数
2007/02/14 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
Python 学习笔记
2008/12/27 Python
python Pygame的具体使用讲解
2017/11/03 Python
Python多线程原理与用法详解
2018/08/20 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
python 命名规范知识点汇总
2020/02/14 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
日语翻译个人求职的自我评价
2013/10/14 职场文书
语文教学感言
2014/02/06 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
2015元旦节寄语
2014/12/08 职场文书
企业催款函范本
2015/06/24 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Python图片检索之以图搜图
2021/05/31 Python