假设我们有一个template.php
文件,其中包含一堆html和一些PHP代码,例如:
...
<body>
<div class="content">
<?php echo $content; ?>
</div>
</body>
...
我希望将文件内容作为文本(包括php代码)读取并输出到textarea中,以便用户能够编辑模板。
我正在尝试使用file_get_contents
完成此操作并使用htmlspecialchars
呈现它,但它似乎在从文件中读取它时执行php代码。如何在这种情况下避免解释和执行php代码?谷歌搜索没有帮助,也许我没有努力。有小费吗?谢谢!
编辑:
好的,我解决了这个问题。问题是我将文件的URL路径传递给file_get_contents
而不是文件系统路径,显然这导致所有的PHP代码被剥离并被忽略(?)。感谢您的提示
答案 0 :(得分:1)
file_get_contents
将不会执行PHP代码。在这种情况下,从远程服务器获得的将是执行的PHP代码,而不是源代码。
编辑本地文件,或者您需要提供一个“后门”,它将向您发送给定PHP文件的代码。要小心,因为这是一个安全漏洞 - 任何人都可以阅读PHP的源代码。
避免这种情况的一种方法是只接受提供文件(如果它们在给定目录中)。 另一个可能是检查文件内容:
<?php
// This file will read any local PHP file (or any file of any kind,
// returning it as text), provided they contain a written agreement
// to be read.
if (!isset($_REQUEST['file']))
die("ERROR: no file supplied");
$path = $_REQUEST['file'];
if (!is_readable($path))
die("ERROR: file is not readable");
$content = file_get_contents($path);
if (false === strpos($content, "IT IS OK TO READ THIS FILE AS SOURCE"))
die("ERROR: this file is not authorized");
if (false !== strpos($content, "IT IS NOT OK TO READ THIS FILE AS SOURCE"))
die("ERROR: this file is not authorized");
Header("Content-Type: text/plain");
Header("Content-Length: " . strlen($content));
die($content);
?>
为了能够读取文件,文件本身必须包含声明,例如
// IT IS OK TO READ THIS FILE AS SOURCE
并且还必须不包含相反含义的声明。