PHP无法将包含PHP代码的文件作为文本文件读取

时间:2009-03-17 15:16:00

标签: php security permissions fopen

我偶然发现了以下的世俗性:

$ handle = fopen(realpath(“../ folder / files.php”),“r”);

无法读取文件,但只要从文件中删除php标签, 它变得可读,我的脚本在页面上打印非空文件内容。 此外,file.php永远不会执行,所以我想知道为什么这是问题。

我想某种程度上Apache或PHP不会让包含php标签的文件只读取PHP文本。

如何为我的特定文件启用它(当然在全球范围内执行它会不安全)?

使用PHP 5.2.x和Apache 2.0

6 个答案:

答案 0 :(得分:11)

我明白了。我正在使用Google Chrome来调试页面,我意识到在查看源代码时,Chrome会出于某种原因隐藏PHP标记。我在Firefox上运行了相同的测试,查看源代码证明一切正常。

以下是测试详情:

代码:

$fh = fopen("test.php","r");
while ($line = fgets($fh)){
echo $line;
}

要读取的文件(test.php):

testing <?php testing2 ?> testing3

渲染(在Chrome和Firefox上):

testing  testing3

查看源代码(使用firefox):

testing <?php testing2 ?> testing3

查看来源(使用Chrome - 我的错误来源):

testing  testing3

答案 1 :(得分:7)

您确定要正确解释输出吗?如果将文件内容直接打印到页面输出,浏览器将不会在尖括号内显示文本,因为它认为它是标记。将您的内容投放为text/plain,或使用浏览器的“查看源”命令确保您查看的内容,而不仅仅是浏览器选择显示的内容。

答案 2 :(得分:0)

Hmm file_get_contents()对我有用。这只是fopen的问题吗?

编辑:你到底得到了什么错误?

答案 3 :(得分:0)

Wadih M.解决了这个问题。 PHP标签在浏览器中隐藏了整个标记包含的php源输出,但View Source显示了它们。谢谢!

答案 4 :(得分:0)

我正在使用htmlspecialchars($line);

它解决了这个问题。

答案 5 :(得分:-1)

重命名该文件 阅读 获取您的数据 改变它们 重新命名您的文件:)