«

php扩展开发步骤示例

时间:2024-2-17 15:32     作者:韩俊     分类: PHP


以下内容以PHP7作为基础,讲解如何从零开始创建一个PHP扩展。示例中,我们将实现如下功能:

function say() { 
    return "hello www.maopiaopiao.com"; 
}

echo say();

输出内容:

hello www.maopiaopiao.com

在扩展中实现一个say方法,调用say方法后,输出 hello www.maopiaopiao.com。

第一步:生成代码

PHP为我们提供了生成基本代码的工具 ext_skel。这个工具在PHP源代码的./ext目录下。

注意:这里的php源代码目录,不是安装后的目录,可以在网上去下载对应版本的php源码,解压即可。
php源码下载地址:http://php.net/downloads.php

$ cd php_src/ext/    
$ ./ext_skel --extname=say

extname参数的值就是扩展名称。执行ext_skel命令后,这样在当前目录下会生成一个与扩展名一样的目录。

第二步:修改config.m4配置文件

config.m4的作用就是配合phpize工具生成configure文件。configure文件是用于环境检测的。检测扩展编译运行所需的环境是否满足。现在我们开始修改config.m4文件。

$ cd ./say   
$ vim ./config.m4

打开,config.m4文件后,你会发现这样一段文字。

dnl If your extension references something external, use with: 

dnl PHP_ARG_WITH(say, for say support, 
dnl Make sure that the comment is aligned: 
dnl [  --with-say             Include say support]) 

dnl Otherwise use enable: 

dnl PHP_ARG_ENABLE(say, whether to enable say support, 
dnl Make sure that the comment is aligned: 
dnl [  --enable-say           Enable say support]) 

其中,dnl 是注释符号。上面的代码说,如果你所编写的扩展如果依赖其它的扩展或者lib库,需要去掉PHP_ARG_WITH相关代码的注释。否则,去掉 PHP_ARG_ENABLE 相关代码段的注释。我们编写的扩展不需要依赖其他的扩展和lib库。

因此,我们去掉PHP_ARG_ENABLE前面的注释。去掉注释后的代码如下:

dnl If your extension references something external, use with: 

 dnl PHP_ARG_WITH(say, for say support, 
 dnl Make sure that the comment is aligned: 
 dnl [  --with-say             Include say support]) 

 dnl Otherwise use enable: 

 PHP_ARG_ENABLE(say, whether to enable say support, 
 Make sure that the comment is aligned: 
 [  --enable-say           Enable say support]) 

第三步:代码实现

修改say.c文件。实现say方法。 

找到PHP_FUNCTION(confirm_say_compiled),在其上面增加如下代码:

PHP_FUNCTION(say) 
{ 
        zend_string *strg;        strg = strpprintf(0, "hello www.maopiaopiao.com"); 
        RETURN_STR(strg); 
} 

找到 PHP_FE(confirm_say_compiled, 在上面增加如下代码:

PHP_FE(say, NULL)  

修改后的代码如下:

const zend_function_entry say_functions[] = { 
     PHP_FE(say, NULL)       /* For testing, remove later. */ 
     PHP_FE(confirm_say_compiled,    NULL)       /* For testing, remove later. */ 
     PHP_FE_END  /* Must be the last line in say_functions[] */ 
 }; 
 /* }}} */  

第四步:编译安装

编译扩展的步骤如下:

$ phpize 
$ ./configure 
$ make && make install  

修改php.ini文件,增加如下代码:

[say] 
extension = say.so  

重启php-fpm服务,然后执行 php -m 命令。在输出的内容中,你会看到say字样。

第五步:调用测试

自己写一个脚本,调用say方法。看输出的内容是否符合预期。

<?php
echo say();

输出内容:

hello www.maopiaopiao.com

至此一个简单的php扩展就开发完成了。

标签: php php教程

热门推荐