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

问题描述 投票:0回答:4

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

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

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

header("Location: login.php");
die();
?>
php http-headers xdebug
4个回答
52
投票

来自 PHP 文档

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

就您而言,您在

echo
 之前使用 
header()


2
投票

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

因此,我将下载最新版本的 xDebug 并相应地更改新文件的 php.ini,一切顺利。正在发送标头 - 重定向已完成并显示错误。

谢谢大家的帮助!


2
投票

您启用了短标签吗? 尝试使用长标签

<?php
:

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

0
投票

是否启用了display_errors?
@Gumbo - 确实是!

嗯,确实不是。因为

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

如果您启用了display_errors,它会显示错误,至少当您

turned output buffering on
时。

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

error_reporting(E_ALL);
echo $undef9306;

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

接下来,在服务器端,您可以使用

headers_sent()
函数来查看标头是否已发送。在客户端使用 HTTP 嗅探器查看是否发送了任何内容

并检查您的 BOM 文件。

© www.soinside.com 2019 - 2024. All rights reserved.