2

我包含一个更改 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() 调用,防止它到达客户端?

4

6 回答 6

5

仅供日后参考。从 PHP 5.3 开始,有一个名为header_remove()的新函数有助于处理这种情况。

于 2009-07-07T09:37:37.757 回答
3

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

header('Location: ', true);

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

于 2009-07-07T09:33:31.197 回答
2

真的没有什么好的方法可以做到这一点。想到两件事:

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

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

于 2009-07-07T09:35:23.440 回答
1

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

require 'no-header://script.php';
于 2009-07-07T11:09:41.613 回答
0

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

于 2009-07-07T09:42:53.847 回答