php 5.6版本中编写一个PHP扩展的简单示例,5.6示例
有时候在php本身没有满足需求的api时候,需要自己写相应的扩展,扩展写完之后进行编译,即可加入自己的开发环境中,扩展php的功能。
这里实现一个连接字符串和int型数的连接操作的简单扩展。
首先,下载最新的php源码安装包,进入ext/目录,新建extstrcat.def:
复制代码 代码如下:
string extstrcat(string strarg, int intarg)
随后运行:
复制代码 代码如下:
./ext_skel --extname=extstrcat --proto=extstrcat.def
修改ext/extstrcat/config.m4,去掉如下行前面的注释(dnl):
复制代码 代码如下:
PHP_ARG_ENABLE(extstrcat, whether to enable extstrcat support,
Make sure that the comment is aligned:
[ --enable-extstrcat Enable extstrcat support])
此时来编辑ext/extstrcat/extstrcat.c,找到PHP_FUNCTION(extstrcat)函数,这里表示扩展中的方法名为extstrcat,方法实现如下:
复制代码 代码如下:
PHP_FUNCTION(extstrcat)
{
char *strarg = NULL;
int argc = ZEND_NUM_ARGS();
int strarg_len;
long intarg;
char intargstr[10];
int retstrlen = 0;
char *retstr = NULL;
if (zend_parse_parameters(argc TSRMLS_CC, "sl", &strarg, &strarg_len, &intarg) == FAILURE)
return;
snprintf(intargstr, 9, "%d", intarg);
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: not yet implemented");
}
,其中strarg和intarg即为对应的两个字符串和整型参数。
接下来要做的事情就是编译扩展,
复制代码 代码如下:
phpize
./configure --enable-extstrcat
make
编译成功之后,在ext/modules目录下会生成extstrcat.so文件,
复制代码 代码如下:
cp ./modules/extstrcat.so /usr/local/lib/php/extensions/no-debug-non-zts-20121212/
修改php.ini,增加extension = extstrcat.so。
重启php-fpm,运行phpinfo()可以看到新增了extstrcat扩展。
现在来写一个Demo,测试一下刚刚的php扩展,
复制代码 代码如下:
if(!extension_loaded('extstrcat')) {
dl('extstrcat.' . PHP_SHLIB_SUFFIX);
}
$ret=extstrcat('testarg',1234);
echo $ret;
?>
,命令行下运行该文件,得到testarg1234.

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。