快速开发一个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&amp;mysql(二)
Oct 09 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
php引用地址改变变量值的问题
Mar 23 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
PHP Cli 模式设置进程名称的方法
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
基于php-fpm 参数的深入理解
2013/06/03 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php生成gif动画的方法
2015/11/05 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
JavaScript 字符串乘法
2009/08/20 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python re模块介绍
2014/11/30 Python
Python中多线程及程序锁浅析
2015/01/21 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
个人简历自荐信
2013/12/05 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
体育教师个人总结
2015/02/09 职场文书
年度考核表个人总结
2015/03/06 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript