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

时间:2009-07-07 09:30:35

标签: php url redirect location

我包含一个更改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 个答案:

答案 0 :(得分:5)

仅供将来参考。从PHP 5.3开始,有一个名为header_remove()的新函数可以帮助处理这种情况。

答案 1 :(得分:3)

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

header('Location: ', true);

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

答案 2 :(得分:2)

没有一个好方法可以做到这一点。我想到了两件事:

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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