初步介绍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 会话(session 时间设定)使用入门代码
Jun 05 PHP
基于PHP静态类的原罪详解
May 06 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
10个php函数实用却不常见
Oct 13 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
php插件Xajax使用方法详解
Aug 31 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
js倒计时显示实例
2016/12/11 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
利用python实现命令行有道词典的方法示例
2017/01/31 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
pytorch进行上采样的种类实例
2020/02/18 Python
opencv+python实现均值滤波
2020/02/19 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
ddl,dml和dcl的含义
2016/05/08 面试题
怎么写好自荐书
2014/03/02 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
大连导游词
2015/02/12 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python