所以我有这个代码,
<?php
header('Content-type: text/plain');
$var_str = $_GET['t0'];
$var = "<?php'n'n'$$text = $var_str;'n'n?>";
file_put_contents('temps.php', $var);
include 'temps.php';
echo $text;
?>
我希望它存储它从中得到的变量http://Mylink.com/apage.php?t0=3(或者基本上是3)到temps.php?当我转到该页面时,会出现以下错误。
致命错误:调用/home/content/f/e/d/apage.php中3
行的未定义函数3()
这将只保存$_GET['t0']的值:
$content = $_GET['t0'].PHP_EOL;
file_put_contents('temps.php', $var);
其他人看起来真的很不安全,我不明白这有什么意义。你能粘贴temps.php想要的最终结果吗?
编辑在这种情况下,可以使用这个来将内容保存到一个txt文件:
somefile.php
$content = $_GET['t0'];
file_put_contents('temps.txt', $content);
将其放入temps.hp:
temps.php
$text = file_get_contents('temps.txt');
和echo$text;将工作
您正在使用它为写入.php准备一些输出,包括:
$var = "<?php'n'n'$$text = $var_str;'n'n?>";
虽然这种方法还可以,但您在这里忽略了一些语法问题。
首先你写了'$$text
。这将导致在$var输出变量中保留一个文本$
。但是$text
将消失,因为它被插入$var字符串中的一个空字符串中。
$text在您的代码中是一个未定义的变量。将error_reporting()
提升至E_ALL
以注意此类问题。
因此,最终,这将成为您的输出temps.php
文件:
<?php $ = 3; ?>
为了在那里获得一个合适的变量名称,因此更好地使用:
$var = "<?php '$text = $var_str; ?>";
# ^
(这里只有一个逃脱的美元标志,没有双倍的$$。)
为了使代码的部署更加安全,您还应该在之前转义或清除$var_str
(这可能是用户输入)。此处使用intval
或var_export
:
$var_str = $_GET['t0'];
$var_str = var_export($var_str, 1);
$var = "<?php '$text = $var_str; ?>";
然后您的输出文件变为:
<?php $text = 3; ?>
但也适用于字符串。