【问题标题】:PHP can't read files containing PHP code as text filesPHP 无法将包含 PHP 代码的文件作为文本文件读取
【发布时间】:2010-10-13 20:55:17
【问题描述】:

我偶然发现了以下特点:

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

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

我猜不知 Apache 或 PHP 不允许将包含 php 标签 PHP 的文件作为文本读取。

如何为我的特定文件启用它(当然在全局范围内这样做是不安全的)?

使用 PHP 5.2.x 和 Apache 2.0

【问题讨论】:

  • 有趣...我也刚刚注意到这一点。似乎任何以
  • 您是否在 fopen() 或阅读部分遇到错误?如果在读取,您使用什么代码来读取文件?
  • 任何代码都是问题,我使用了 fopen,但 file_get_contents 导致相同的行为。
  • 实际上我在第一条评论上错了。只有当有 testing3”,输出为:“testing testing3”。似乎 php 过滤掉了 , ?> 标签内的内容。

标签: php security permissions fopen


【解决方案1】:

嗯 file_get_contents() 对我有用。只有 fopen 有问题吗?

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

【讨论】:

  • 不太可能,我刚刚测试过 - file_get_contents() 对我有同样的问题。
【解决方案2】:

您确定您正确解释了输出吗?如果您将文件内容直接打印到页面输出,浏览器将不会在尖括号内显示文本,因为它认为这是一个标签。以text/plain 的形式提供您的内容,或使用浏览器的“查看源代码”命令来确保您看到的是真正的内容,而不仅仅是浏览器选择显示的内容。

【讨论】:

  • 我同意。我可以打印除 内的标签之外的所有内容。但是其中一个测试页面显示了正在读取的 php 文件中的按钮。
【解决方案3】:

我明白了。我正在使用 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

【讨论】:

  • 你真的明白了。就是这样!
  • 那是一堆蹩脚的东西。 Firefox 曾经做过类似的事情,当你查看源文件时它会改变文档的来源。 (基本上向您展示“这就是我解释无效 HTML 的方式)因此我开始使用 curl 来调试 HTML 输出。
  • 对。感谢您的洞察力,艾伦。使用 curl,事情很可能不会出错。
  • 为了确保将来不会发生这种情况,您可以执行以下操作: echo htmlspecialchars($line);或 echo str_replace('', '?>', $line));
【解决方案4】:

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

【讨论】:

  • 欢迎 PHP 思想家。只需将回复设置为解决方案(大的绿色复选标志)即可关闭问题。谢谢
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    我正在使用htmlspecialchars($line);

    它解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 2020-08-25
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多