PHP标头位置重定向不起作用 - 为什么?

时间:2010-04-25 21:37:45

标签: php redirect header location

这是我的档案。我想让它重定向,但没有任何反应。为了查看发生了什么,我在标题部分之前添加了一个echo。

它既不会抛出错误,也不会重定向到index.php。怎么了? 我打开/关闭了输出缓冲,但没有任何东西可以重定向。我该怎么办?

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

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

由于

4 个答案:

答案 0 :(得分:44)

来自PHP documentation

必须在发送任何实际输出之前调用

header(),无论是普通HTML标记,文件中的空行还是PHP。

在您的情况下,您在echo

之前使用header()

答案 1 :(得分:1)

您是否启用了短标签? 尝试使用长标记<?php

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

答案 2 :(得分:1)

我提醒自己,我在实际的测试环境中安装了xDebug,然后在Google上搜索后,我找到了这个网站:http://bugs.xdebug.org/view.php?id=532

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

感谢大家的帮助!

答案 3 :(得分:0)

  

是否启用了display_errors?
  @Gumbo - 肯定是!

嗯,肯定不是。因为

  

为了查看发生了什么,我在标题部分之前添加了一个echo。

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

因此,首先要确保您能看到错误消息 只打印出一个未定义的变量,

error_reporting(E_ALL);
echo $undef9306;

我相信你不会看到它。 因此,您必须在

上显示错误

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

并检查文件中的物料清单。