本教程探讨了PHP在写入包含PHP代码的字符串时,zuojiankuohao
php
cn?php ?> 标签和 $variable 丢失的问题。文章强调了敏感数据存储的最佳实践,如使用JSON或数据库并存储在Web根目录之外。同时,也详细介绍了在确实需要动态生成PHP代码时,如何通过转义、切换引用方式等技巧来正确处理PHP语法,确保代码按预期生成和执行。
理解问题根源
当php脚本尝试将一个包含php代码片段(如 标签或 $variable)的字符串写入文件时,可能会遇到这些特殊语法元素被“吞噬”或错误解释的问题。这主要是因为php在处理双引号字符串时,会对其内容进行解析,尝试查找并替换变量。例如,"$pass
word
s" 中的 $passwords 会被php解释器视为当前作用域的一个变量,如果该变量未定义,它将替换为空字符串。同样,
然而,输出文件 htpassw_array.php 却缺少了 标签和 $passwords 变量名,只剩下:
'password1',
'login2' => 'password2',
'login3' => 'password3',
);?>";
$myfile = fopen("htpassw_array.php", "w") or die("Unable to open file!");
fwrite($myfile, $txt);
fclose($myfile);
?> = array(
'login1' => 'password1',
'login2' => 'password2',
'login3' => 'password3',
); 'password1',
'login2' => 'password2',
'login3' => 'password3',
);
// 建议将文件存储在Web根目录之外,例如 /home/myuser/data/
$file_path = "/home/myuser/data/htpassw_array.json";
// 将PHP数组编码为JSON字符串
$json_content = json_encode($password_data, JSON_PRETTY_PRINT);
$myfile = fopen($file_path, "w") or die("无法打开文件进行写入!");
fwrite($myfile, $json_content);
fclose($myfile);
echo "数据已成功写入到: " . $file_path . "
";
?> 'password1',
'login2' => 'password2',
'login3' => 'password3',
);
$file_path = "/home/myuser/data/htpassw_array_export.php";
// 生成可解析的PHP代码字符串
$php_content = "";
$myfile = fopen($file_path, "w") or die("无法打开文件进行写入!");
fwrite($myfile, $php_content);
fclose($myfile);
echo "数据已成功写入到: " . $file_path . "
";
?> 'password1',
'login2' => 'password2',
'login3' => 'password3',
); ?>";
$myfile = fopen("htpassw_array_escaped.php", "w") or die("无法打开文件!");
fwrite($myfile, $txt);
fclose($myfile);
echo "文件 htpassw_array_escaped.php 已生成。
";
?> 'password1',
'login2' => 'password2',
'login3' => 'password3',
); ?> "password1",
"login2" => "password2",
"login3" => "password3",
); ?>'; // 注意这里使用了单引号,内部的字符串值使用了双引号
$myfile = fopen("htpassw_array_single_quote.php", "w") or die("无法打开文件!");
fwrite($myfile, $txt);
fclose($myfile);
echo "文件 htpassw_array_single_quote.php 已生成。
";
?> "password1",
"login2" => "password2",
"login3" => "password3",
); ?> 'password1',
'login2' => 'password2',
'login3' => 'password3',
); ?>";
$myfile = fopen("htpassw_array_concatenated.php", "w") or die("无法打开文件!");
fwrite($myfile, $txt);
fclose($myfile);
echo "文件 htpassw_array_concatenated.php 已生成。
";
?>