快速开发一个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 相关文章推荐
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
ajax实现无刷新分页(php)
Jul 18 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
Jul 13 PHP
php实现CSV文件导入和导出
Oct 24 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP解决高并发的优化方案实例
Dec 10 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文件操作实现代码分享
2011/09/01 PHP
php重定向的三种方法分享
2012/02/22 PHP
php多文件上传下载示例分享
2014/02/20 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
再探JavaScript作用域
2014/09/24 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
python转换摩斯密码示例
2014/02/16 Python
浅析使用Python操作文件
2017/07/31 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
基于python实现KNN分类算法
2020/04/23 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
教师党员思想汇报
2014/01/06 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
公司会议开幕词
2015/01/29 职场文书
React配置子路由的实现
2021/06/03 Javascript