【问题标题】:How do I prevent an included PHP script from changing the Location URL?如何防止包含的 PHP 脚本更改位置 URL?
【发布时间】:2010-11-08 15:25:10
【问题描述】:

我包含一个更改 URL 的 PHP 脚本。

// index.php
ob_start();
include "script.php";
   // This script redirects using  header("Location:");
$out = ob_get_clean();
// I use the $out data for calculations
echo $out;

有没有一种简单的方法来对抗或撤消这种不需要的重定向?怎么样:

header("Location: index.php");   // redirect back to self

但这会导致无休止的重定向循环......有什么想法吗?

或者有没有办法从 $out 缓冲区中去除 header() 调用,防止它到达客户端?

【问题讨论】:

    标签: php url redirect location


    【解决方案1】:

    仅供将来参考。从 PHP 5.3 开始,有一个名为 header_remove() 的新函数有助于处理此类情况。

    【讨论】:

      【解决方案2】:

      您可以尝试使用无效值覆盖该标头字段,例如:

      header('Location: ', true);
      

      但我不知道客户对此有何反应。

      【讨论】:

        【解决方案3】:

        没有真正的好方法来做到这一点。想到两件事:

        1. 将 script.php 作为文本文件打开,去掉任何 header() 命令,然后 eval() 结果。
        2. 在包含 script.php 之前回显一个空格,然后捕获 PHP 生成的关于在输出已经开始后发出 header() 的警告。您需要在输出缓冲之前回显空间。

        【讨论】:

          【解决方案4】:

          首先将文件作为变量包含在file_get_contents() 中,去掉不需要的标头,然后使用 PHP 代码运行它(我不会提到用于将 PHP 字符串解析为 PHP 代码的邪恶词)?

          【讨论】:

            【解决方案5】:

            如果您没有 PHP5.3(您可能没有),Gumbo's answer 不起作用并且您不想使用 eval,那么我能看到的唯一其他选项是使用streams。然而,这是另一种更灵活但更复杂的 eval 形式。 Streams 与tokenizer 结合使用,您将能够通过简单的方式摆脱该函数调用:

            require 'no-header://script.php';
            

            【讨论】:

              【解决方案6】:

              由于您在输出之前已在字符串中包含完整的文本,因此您可以通过搜索和替换(例如使用正则表达式)简单地删除所需的标题。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-11-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多