2010-04-25 57 views
24

这是我的文件。我想让它重定向,但没有任何反应。要检查发生了什么,我在标题部分之前添加了一个回显。PHP标题位置重定向不起作用 - 为什么?

它既不会引发错误或重定向到index.php。哪里不对? 我已经打开/关闭输出缓冲,但没有使它重定向。我能做什么?

<? 
error_reporting(E_ALL); 
echo 'This is an error'; 

header("Location: login.php"); 
die(); 
?> 

感谢

+1

是* display \ _errors *是否启用? – Gumbo 2010-04-25 21:39:29

+0

@Gumbo - 当然是! – Industrial 2010-04-25 21:42:44

+3

您提供的代码是否至少输出'这是一个错误'? – timdev 2010-04-25 21:48:01

回答

1

我提醒自己,我已经在实际的测试环境中安装了XDebug和谷歌上搜索之后,我发现这个网站:http://bugs.xdebug.org/view.php?id=532

所以我会下载xDebug的最新版本,并相应地更改了php.ini文件,所有内容都像魅力一样。标题正在发送 - 重定向完成并显示错误。

谢谢大家的帮助!

43

PHP documentation

header()必须在发送任何实际输出之前调用,无论是普通的HTML标签,在一个文件中的空行,或PHP。

而在你的情况,你正在使用echoheader()

+0

我知道这就是为什么我在header() - call之前做出回声。它在其他服务器上发生错误,应该这样做。为什么没有发生? – Industrial 2010-04-25 21:40:58

+7

改变标题的替代方法是使用:'<?php echo“”?>' – 2012-11-10 23:19:23

1

之前您是否启用短标记? 与长标签<?php尝试:

<?php 
error_reporting(E_ALL); 
header("Location: login.php"); 
die(); 
?> 
+0

是的,我确实有短标记设置启用,罚款,除了标题的东西... – Industrial 2010-04-25 22:16:50

0

是否启用了display_errors?
@Gumbo - 当然是!

好吧,它肯定不是。因为

要检查发生了什么,我在标题部分之前添加了一个回显。

如果您启用了display_errors,它将显示错误,至少在您turned output buffering on时。

所以,首先确保你可以看到错误信息。
刚刚打印出一个未定义的变量,

error_reporting(E_ALL); 
echo $undef9306; 

我相信你不会看到它。 所以,你必须打开显示错误

接下来,在服务器端,您可以使用headers_sent()函数来查看是否发送标头。在客户端使用HTTP嗅探器来查看是否发送了任何东西

然后检查文件的BOM。

+0

嗨。恐怕不是。 Display_errors被启用,但它是xDebug导致这...感谢您的帮助上校! – Industrial 2010-04-26 15:09:35