警告:无法修改标头信息 - 已经由...标头刷新,重定向发送的标头

时间:2012-07-23 15:21:05

标签: php html header refresh

  

可能重复:
  Headers already sent by PHP

我在运行用户登录脚本后尝试重定向时收到此错误。

它尝试更改此行的标题数据:

header("Refresh: 2; url=index.php");

这是完整的login.php脚本。

<?php 
session_start();
require_once('init.php');

$username = trim($_POST['username']);
// create a new object
$login = new Auth($_POST, $dbh);

    if($login->validateLogin()){

        $_SESSION['loggedin'] = true;
        $_SESSION['username'] = $username;
        $list = $login->getUserInfo();
        $_SESSION['id'] = $list['id'];
        $_SESSION['thumb'] = $list['img_thumb'];

        echo '<div class="content">';
        echo '<h1>Thank you for logging in '.$username.'. Redirecting...</h1>';
        echo '</div>';
        header("Refresh: 2; url=index.php");

    }else{

        echo '<div class="content">';
        echo '<h1>Sorry but we didn\'t recognise those login details, please try again.</h1>';
        echo '</div>';

    }



require_once('inc/footer.inc.php');
?>

init.php文件调用包含html5 doctype,meta标签等的header.php。

如何在登录后将用户重定向到索引页并像往常一样发送标题信息?

3 个答案:

答案 0 :(得分:3)

来自PHP docs

  

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

如果您希望页面在几秒钟后重定向,则需要使用Meta Refresh

<meta http-equiv="refresh" content="5;URL='http://example.com/'">

答案 1 :(得分:0)

只需在任何header()语句前移动echo来电:

<?php
/* ... */
if($login->validateLogin()){

    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $username;
    $list = $login->getUserInfo();
    $_SESSION['id'] = $list['id'];
    $_SESSION['thumb'] = $list['img_thumb'];

    header("Refresh: 2; url=index.php"); // Put this *before* any output
    echo '<div class="content">';
    echo '<h1>Thank you for logging in '.$username.'. Redirecting...</h1>';
    echo '</div>';

}else{

    echo '<div class="content">';
    echo '<h1>Sorry but we didn\'t recognise those login details, please try again.</h1>';
    echo '</div>';

}
/* ... */

答案 2 :(得分:0)

使用echo然后尝试为Location设置标题将始终引发该错误。 ¿让用户了解重定向而不是重定向可能会更好?如果你想显示这样的消息(如果这种方法有效的话,这种方法不会显示一整秒),你应该使用javascript来更新内容并使用某种延迟......

......但也许这工作太多了。如果您在登录后显示欢迎信息,那就足够了吧? :)