在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。