快速开发一个PHP扩展图文教程


Posted in PHP onDecember 12, 2008

需求:比如开发一个叫做 heiyeluren 的扩展,扩展里就一个函数 heiyeluren_test(),输入一个字符串,函数返回:Your input string: xxxxx。
要求:了解C/C++编程,熟悉PHP编程
环境:下载一份php对应版本的源码,我这里是 php-5.2.6,先正常安装php,假设我们的php安装在 /usr/local/php 目录,源码在 /root/soft/php/php-5.2.6/,现在开始!
步骤一:生成扩展框架

cd /root/soft/php/php-5.2.6/ext
./ext_skel --extname=heiyeluren
cd /root/soft/php/php-5.2.6/ext/heiyeluren
vi config.m4
打开文件后去掉 dnl ,获得下面的信息:
PHP_ARG_ENABLE(heiyeluren, whether to enable heiyeluren support,
[  --enable-heiyeluren           Enable heiyeluren support])

保存退出.
(图01)
快速开发一个PHP扩展图文教程

 

 

第二步:编写代码

vi php_heiyeluren.h
找到:PHP_FUNCTION(confirm_heiyeluren_compiled); ,新增一行:
PHP_FUNCTION(heiyeluren_test);
保存退出。
(图02)
快速开发一个PHP扩展图文教程

vi heiyeluren.c
数组里增加我们的函数,找到 zend_function_entry heiyeluren_functions[],增加:
PHP_FE(heiyeluren, NULL)
(图03)

快速开发一个PHP扩展图文教程

 

再到 heiyeluren.c 文件最后面增加如下代码:
PHP_FUNCTION(heiyeluren_test)
{
    char *arg = NULL;
    int arg_len, len;
    char *strg;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
        return;
    }

    len = spprintf(&strg, 0, "Your input string: %s\n", arg);
    RETURN_STRINGL(strg, len, 0);
}
保存退出。
(图04)

快速开发一个PHP扩展图文教程

 

 

 

第三步:编译安装

cd /root/soft/php/php-5.2.6/ext/heiyeluren
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make test
make install

现在看看是不是有个 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/heiyeluren.so
编辑php.ini,把扩展加入进去:
vi /usr/local/php/lib/php.ini
在[PHP]模块下增加:
extension = heiyeluren.so
保存退出。
(图05)

快速开发一个PHP扩展图文教程

 

注意:如果你不存在扩展文件目录,或者安装报错,那么可以自行建立这个目录,然后把扩展拷贝到目录下,然后记得把 php.ini 文件中的 extension_dir 修改为该目录:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
(图06)

快速开发一个PHP扩展图文教程

 

 

第四步:检查安装结果
现在看看模块加载了没有:
/usr/local/php/bin/php -m,应该会打印出:
[PHP Modules]
...
heiyeluren
...
[Zend Modules]

然后重启apache,输出 phpinfo() ,应该能够看到:
heiyeluren
heiyeluren support enabled

(图07)

快速开发一个PHP扩展图文教程

 

看看函数是否存在并且调用,在web目录下建立:heiyeluren.php
<?php
echo "<pre>";
print_r(get_loaded_extensions());
print_r(get_extension_funcs('heiyeluren'));
echo heiyeluren_test('My first php extension');
echo "</pre>";
?>

访问apache,应该能够看到:
Array
(
    ...
    [33] => heiyeluren
)
Array
(
    [0] => confirm_heiyeluren_compiled
    [1] => heiyeluren_test
)
Your input string: heiyeluren
(图08)

快速开发一个PHP扩展图文教程

扩展制作成功!

PHP 相关文章推荐
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
php绘制一个矩形的方法
Jan 24 PHP
php简单分页类实现方法
Feb 26 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
PHP Google的translate API代码
Dec 10 #PHP
php escape URL编码
Dec 10 #PHP
php 破解防盗链图片函数
Dec 09 #PHP
中英文字符串翻转函数
Dec 09 #PHP
php2html php生成静态页函数
Dec 08 #PHP
php 远程图片保存到本地的函数类
Dec 08 #PHP
PHP 出现乱码和Sessions验证问题的解决方法!
Dec 06 #PHP
You might like
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
使用Python操作excel文件的实例代码
2017/10/15 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python创建学生管理系统
2019/11/22 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
python如何实现单链表的反转
2020/02/10 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
解释i节点在文件系统中的作用
2013/11/26 面试题
葡萄牙语专业个人求职信
2013/12/10 职场文书
大学生创业计划书的格式要求
2013/12/29 职场文书
医院工作检讨书范文
2014/02/10 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
2014年化验员工作总结
2014/11/18 职场文书
保证书格式
2015/01/16 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
创业计划书之网吧
2019/10/10 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript