输出php代码作为文件中的纯文本

时间:2012-09-06 16:20:10

标签: php html

假设我们有一个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代码被剥离并被忽略(?)。感谢您的提示

1 个答案:

答案 0 :(得分:1)

除非您尝试编辑远程服务器上的文件并提供URL,否则

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

并且还必须包含相反含义的声明。