我正在学习PHP的一些基础知识,所以我对两个语句感到困惑:
print("${phpinfo()}");
函数的打印结果。所以我试着让它依赖于用户输入,所以我做了这样的陈述:
print("$_GET[z]");
但是,当我传递这个值时,它的${phpinfo()}
${phpinfo()}
与第一条语句不同。那么,我如何才能纠正这个错误,并打印函数的结果,而不是打印它的名称。
发布于 2020-01-28 16:49:02
如果您需要打印函数的结果,例如:
function result(){
return "res";
}
使用print_r(result());
-> print_r()。您将在输出中获得res
。
你的函数必须返回一些东西,它可以是一个对象,一个数组,一个字符串或数值,也可以是布尔值。在本例中,对于每种类型的数据,您将看到print_r()
格式的输出,对于字符串/数值,您将看到echo()
格式的输出。
在您的案例中使用
print_r($_GET["z"]);
使用引号意味着打印一些字符串。"z"
-表示变量$_GET
中数组的索引。另外,请阅读difference between using of single and double quotes。
此外,您可以将函数的输出值放入变量中,然后打印它,但此输出的数据类型必须是字符串/数字。
function result(){
// return 333;
return "eeee";
}
$s = result();
print_r("$s");
// Output is: eeee (or 333)
对于数组变量,您可以按如下方式使用print_r()
:
$_GET["a"] = "word";
print_r("$_GET[a]");
// Output is: word
但是$_GET["a"]
也应该只有字符串/数字数据类型。
在这里你可以读到很多关于string parsing process的案例。
在使用print()函数的情况下,您可以将其用作:
$_GET['x'] = 'sss';
print "this is {$_GET['x']} !";
同样,value应该是string/numeric数据类型。
如果你想从函数中得到结果,你可以使用下面的代码:
$_GET['z'] = "phpinfo()";
foreach ($_GET as $item){
if (gettype($item) === 'string'){
if (strpos($item,'()')) {
$s = str_replace('()','',$item);
print $s(); // execution
}
}
}
在这里,您可以将所需函数的名称作为字符串发送,如"phpinfo()"
。
您不能在$_GET
because of that中使用${phpinfo()}
。它读取内容并认为它是一个变量,但事实并非如此。
发布于 2020-01-28 18:41:36
与.php?z=phpinfo链接
然后
$z = $_GET['z'];
print_r($z());
但请记住,这很容易受到攻击--只是提醒一下;)
编辑:您也可以使用call_user_func
print_r(call_user_func($_GET['z']));
https://stackoverflow.com/questions/59944871
复制相似问题