快速开发一个PHP扩展图文教程

2015-01-24信息快讯网

作者:heiyeluren本文通过非常快速的方式讲解了如何制作一个PHP 5.2 环境的扩展(PHP Extension),希望能够在图文的方式下让想快速学习的朋友了解一下制作过程。

需求:比如开发一个叫做 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 checkbox 取值详细说明
PHP 截取字符串专题集合
php 过滤器实现代码
PHP对字符串的递增运算分析
PHP原理之异常机制深入分析
将一维或多维的数组连接成一个字符串的php代码
用PHP实现递归循环每一个目录
UCenter中的一个可逆加密函数authcode函数代码
超级好用的一个php上传图片类(随机名,缩略图,加水印)
PHP zlib扩展实现页面GZIP压缩输出
用sql命令修改数据表中的一个字段为非空(not null)的语句
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
php快速url重写更新版[需php 5.30以上]
php快速url重写 更新版[需php 5.30以上]
PHP 检查扩展库或函数是否可用的代码
php smarty函数扩展
php Xdebug 调试扩展的安装与使用.
php 无法载入mysql扩展
php程序之die调试法 快速解决错误
PHPMyAdmin 快速配置方法
php 文件状态缓存带来的问题
PHP Google的translate API代码
php escape URL编码
php 破解防盗链图片函数
php2html php生成静态页函数
php 远程图片保存到本地的函数类
PHP下一个非常全面获取图象信息的函数
php在字符串中查找另一个字符串
Php Cookie的一个使用注意点
php下实现一个阿拉伯数字转中文数字的函数
快速配置PHPMyAdmin方法
WindowsXP中快速配置Apache+PHP5+Mysql
java EJB 加密与解密原理的一个例子
php扩展ZF――Validate扩展
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
用PHP 快速生成 Flash 动画的方法
Smarty模板快速入门
IIS环境下快速安装、配置和调试PHP5.2.0
扩展你的 PHP 之入门篇
php获得文件扩展名三法
©2014-2024 dbsqp.com