2009-07-07 77 views
2

我正在添加一个更改URL的PHP​​脚本。如何防止包含的PHP脚本更改位置URL?

// 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()调用,防止它到达客户端?

回答

5

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

3

你可以尝试覆盖头域的值无效,如:

header('Location: ', true); 

但我不知道客户端上的反应。

2

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

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

什么第一,包括文件与file_get_contents()变量,剔除不必要的头,然后用PHP代码运行它(我就不提了用于分析一个PHP字符串作为PHP代码邪恶字)?

+0

evil .. eval :) – 2009-07-07 09:36:51

0

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

1

如果你没有PHP5.3在你的处置(你可能没有),Gumbo's answer不起作用,你不想使用eval,那么我可以看到唯一的其他选项是使用的streams。然而,这是另一种更灵活但复杂的eval形式。流,结合tokenizer,你就可以用一个简单的方法去掉那个函数调用:

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