快速开发一个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函数
Oct 03 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
php获取系统变量方法小结
May 29 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
Laravel框架分页实现方法分析
Jun 12 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
无线电的诞生过程
2021/03/01 无线电
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JavaScript 的方法重载效果
2009/08/07 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
js读取本地文件的实例
2017/12/22 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
教师实习期自我鉴定
2013/10/06 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
物业管理工作方案
2014/05/10 职场文书
小学庆六一活动总结
2014/08/28 职场文书
出租房屋协议书
2014/09/14 职场文书
交心谈心活动总结
2015/05/11 职场文书
八年级作文之友谊
2019/12/02 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android