初步介绍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者的疑难问答(2)
Oct 09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
mysql 性能的检查和优化方法
Jun 21 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
php文件读取方法实例分析
Jun 20 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
PHP生成随机码的思路与方法实例探索
Apr 11 PHP
Jsonp劫持学习
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
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
PHP实现八皇后算法
2019/05/06 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
Python 字符串换行的多种方式
2018/09/06 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
scrapy-splash简单使用详解
2021/02/21 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
几个SQL的面试题
2014/03/08 面试题
艺术教育实施方案
2014/05/03 职场文书
运动会稿件100字
2014/09/24 职场文书
公司离职证明标准范本
2014/10/05 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers