php不能以变量函数调用eval
变量函数:
将一个函数的名称赋值给一个变量,在这个变量后面加上括号就实现了变量函数调用。
先举一个例子
<?php
$a="system";
$b="echo nihao";
$c='eval';
$a($b);
echo "\n";
输出 nihao 相当于执行了 system("echo nihao");
再看一个例子
$a="system";
$b="echo nihao";
$c='eval';
$c($b);
echo "\n";
这里运行抛出了异常,相当于 eval("echo nihao");
这里是因为eval在php中并不是一个函数,而是语言结构,也就是不符合变量函数。
assert在php7.2之前是函数。在7.2版本之后也变成了语言结构。
eval:
将字符串当做php代码执行。
assert:
执行有返回值的php代码。
本地测试
<?php
highlight_file(__FILE__);
@$a = $_GET['a'];
@$b = $_GET['b'];
@$a($b);
?>
这里我使用的php5.6版本。
先通过eval测试:
发现没有任何回显。 再通过assert测试一下:
成功返回。
总结
之前一直以为eval是一个函数,现在知道了是语法结构。assert在php7.2之前是函数。在7.2版本之后也变成了语言结构。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果