初步介绍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 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
php字符串倒叙
Apr 01 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图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
vue3.0 上手体验
2020/09/21 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
简单实现python聊天程序
2018/04/01 Python
实例讲解Python3中abs()函数
2019/02/19 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
关于毕业的中学校园广播稿
2014/01/26 职场文书
中学生期末评语
2014/02/03 职场文书
化学专业自荐信
2014/05/28 职场文书
法院答辩状格式
2015/05/22 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题