代码之家  ›  专栏  ›  技术社区  ›  Robin Rodricks

如何防止包含的PHP脚本更改位置URL?

  •  2
  • Robin Rodricks  · 技术社区  · 16 年前

    我包含了一个更改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()调用,从而阻止它到达客户机?

    6 回复  |  直到 16 年前
        1
  •  5
  •   Ionuț G. Stan    16 年前

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

        2
  •  3
  •   Gumbo    16 年前

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

    header('Location: ', true);
    

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

        3
  •  2
  •   Sander Marechal    16 年前

    没有真正的好办法。我想到两件事:

    1. 以文本文件的形式打开script.php,去掉header()命令,然后对结果进行eval()。
    2. 在包含script.php之前回显一个空格,然后捕获php在输出开始后生成的关于发出header()的警告。在输出缓冲之前,需要对空间进行回声。
        4
  •  1
  •   alex    16 年前

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

        5
  •  1
  •   Community CDub    8 年前

    如果你没有PHP5.3供你使用(你可能没有)。 Gumbo's answer 不工作,你也不想使用eval,那么我能看到的唯一的选择就是使用 streams . 然而,这是另一种更灵活但更复杂的评估形式。流,与 tokenizer ,您可以通过一个简单的:

    require 'no-header://script.php';
    
        6
  •  0
  •   Rik Heywood    16 年前

    由于在输出前字符串中有完整的文本,因此可以通过搜索和替换(例如使用regex)来简单地删除所需的标题。

    推荐文章