初步介绍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 相关文章推荐
非常不错的MySQL优化的8条经验
Mar 24 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
php ios推送(代码)
Jul 01 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
php+mysql实现数据库随机重排实例
Oct 17 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 PHP
PHP实现rar解压读取扩展包小结
Jun 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数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
javascript Object与Function使用
2010/01/11 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
python动态文本进度条的实例代码
2020/01/22 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
Python requests接口测试实现代码
2020/09/08 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
公司同意接收函
2014/01/13 职场文书
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python