在PHP5.6中编写PHP扩展的一个简单示例

有时,当PHP本身不满足API的需要时,它需要编写自己的扩展,在扩展之后编译它,编译它,添加到自己的开发环境中,扩展PHP的功能。

在这里实现连接字符串的连接操作和int类型号的简单扩展。

首先,下载最新的PHP源码安装包,进入分机/目录,并建立一个新的extstrcat.def:

复制代码代码如下所示:

字符串(字符串extstrcat strarg,int intarg)



然后运行:

复制代码代码如下所示:

。/ ext_skel -- extname = extstrcat --原= extstrcat.def



修改分机 / / extstrcat config.m4和删除注释(DNL)在下行前。

复制代码代码如下所示:

php_arg_enable(extstrcat,是否启用extstrcat支持,

确保注释是对齐的:

{——使extstrcat使extstrcat支持})



在这一点上,编辑 / / extstrcat Ext extstrcat。C和找到php_function(extstrcat)功能,这意味着在扩展的方法称为extstrcat。

复制代码代码如下所示:

php_function(extstrcat)

{

char * strarg = null;

int argc = zend_num_args();

国际strarg_len;

长intarg;



焦intargstr { 10 };

国际retstrlen = 0;

char * retstr = null;



如果(zend_parse_parameters(argc tsrmls_cc,SL

返回;



Snprintf(intargstr,9,%d

retstrlen = strarg_len + strlen(intargstr)+ 1;

retstr =(char *)malloc(sizeof(char)* retstrlen);

memset(retstr,' 0,retstrlen);

Strncat(retstr,strarg,strlen(strarg));

Strncat(retstr,intargstr,strlen(intargstr));

return_string(retstr,1);



php_error(e_warning,extstract:尚未实现);

}



在这strarg和intarg是对应的字符串和整数参数。

下一步要做的是编译和扩展。

复制代码代码如下所示:

phpize

。 /配置,使extstrcat

使



在编译成功,这extstrcat.so文件将生成Ext /模块目录。

复制代码代码如下所示:

CP /模块/ extstrcat.so / usr / / / PHP本地库 / / / no-debug-non-zts-20121212扩展



修改php.ini文件,添加扩展= extstrcat.so。

重启php-fpm,运行phpinfo()看到新的extstrcat扩展。

现在编写一个演示并测试PHP扩展名。

复制代码代码如下所示:

< PHP

如果(!extension_loaded('extstrcat ')){

DL('extstrcat。。php_shlib_suffix);

}

ret = extstrcat美元('testarg ',1234);

回声$;

>

在命令行下运行该文件,得到testarg1234。