我正在与以下脚本作斗争:
$filename = '../lang.nl.php';
$string = '<?php // language = ' . $filename . '<br>';
foreach ($_POST as $param_name => $param_val) {
$string .= "$lang=['". $param_name ."'] = ". $param_val .";'n";
}
$string .= "?>";
file_put_contents($filename, $string);
正如您所看到的,我想创建一个包含所有$_POST变量的语言文件,但PHP将$string中的$lang视为一个变量。你可以想象这不是我想要的,它应该只打印$lang,而不是$lang作为变量应该是什么。
逃离$:$string .= "'$lang=['". $param_name ."'] = ". $param_val .";'n";
与原始代码不同的是$lang
之前的反斜杠,这使$符号成为普通的$符号,而不是变量名的标记。
在这里使用var_export
更容易(更安全):
$filename = '../lang.nl.php';
$post = var_export($_POST, true);
$code = "<?php // language = $filename;
'$lang = $post;
?>";
file_put_contents($filename, $code);
如果param_val
包含引号,则"$lang=['". $param_name ."'] = ". $param_val;
将失败。