快速开发一个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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
用ODBC的分页显示
Oct 09 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
PHP PDOStatement::rowCount讲解
Feb 01 PHP
PHP设计模式之命令模式示例详解
Dec 20 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生成静态文件的多种方法分享
2012/07/17 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
Python获取当前时间的方法
2014/01/14 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
python实现图片筛选程序
2018/10/24 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
Python函数和模块的使用总结
2019/05/20 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
python interpolate插值实例
2020/07/06 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
数字漫画:comiXology
2020/06/13 全球购物
公务员政审单位鉴定材料
2014/05/16 职场文书
党的生日演讲稿
2014/09/10 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
Python Pandas知识点之缺失值处理详解
2021/05/11 Python