快速开发一个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用SAX解析XML的实现代码与问题分析
Aug 22 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
php目录操作实例代码
Feb 21 PHP
php metaphone()函数的定义和用法
May 15 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
php 可变函数使用小结
Jun 12 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 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
十天学会php之第七天
2006/10/09 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php文件读取方法实例分析
2015/06/20 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
loading动画特效小结
2017/01/22 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
Python实例一个类背后发生了什么
2016/02/09 Python
详解Python中的四种队列
2018/05/21 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
如何理解transaction事务的概念
2015/05/27 面试题
千手观音观后感
2015/06/03 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers