快速开发一个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中的HashTable结构详解
Jun 13 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
php正则表达式学习笔记
Nov 13 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
Laravel框架实现抢红包功能示例
Oct 31 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
PHP number_format函数原理及实例解析
Jul 14 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+mysql写的简单留言本实例代码
2008/07/25 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
javascript生成大小写字母
2015/07/03 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
详解Vue整合axios的实例代码
2017/06/21 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
Python实现登陆文件验证方法
2018/10/06 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
管道维修工岗位职责
2013/12/27 职场文书
老师给学生的表扬信
2014/01/17 职场文书
小加工厂管理制度
2014/01/21 职场文书
工厂会计员职责
2014/02/06 职场文书
大四自我鉴定
2014/02/08 职场文书
战略合作协议书范本
2014/04/18 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
Python基本数据类型之字符串str
2021/07/21 Python
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android