PHP回音和标头-未输出回音

时间:2019-04-25 18:24:37

标签: php html header echo output-buffering

我有一个部分,如果没有会话变量用户名,应用程序应通过该部分输出一条错误消息,指出需要凭据,然后将用户重定向到登录页面。问题是,只有后者正在发生,并且没有输出“错误消息”。

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    echo "<script type='text/javascript'>alert('Not logged in. Please input required credentials.');</script>";
    header('location: /se7en/login.php');
    ob_end_flush();

}
?>

我尝试使用 Output Buffer 来解决此问题,但是,同一问题不断发生。请问该如何解决?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我同意@khartnett。

由于您正在执行标题重定向,它将在您有机会显示警报框之前重定向页面。

如果您这样做:

<?php if (!isset($_SESSION['username'])){  
ob_start();
echo "<script type='text/javascript'>" .
          "alert('Not logged in. Please input required credentials.');" .
          "window.location.href = '/se7en/login.php';" .
     "</script>";
header('location: /se7en/login.php');
ob_end_flush();
}
?>

然后,它将显示警告框,该框阻止脚本的进一步执行,直到按OK(确定),然后继续通过window.location.href重定向。

答案 1 :(得分:0)

我通常通过让我重定向的页面发布消息来满足此需求。一种方法是:

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    header('location: /se7en/login.php?message=Not logged in. Please input required credentials.');
    ob_end_flush();

}
?>

然后在您的login.php上

if ( ! empty( $_GET['message'] ) ) {
    $message = htmlspecialchars( $_GET['message'] );
    echo "<script type='text/javascript'>alert('$message');</script>";
}

您也可以只传递一个消息号(message=1),然后将所有可能的消息放在您的login.php文件中的数组中:

$messages = array(
    1 => "Not logged.....",
    2 => "something else...",
    //...
);
if( ! empty( $_GET['message'] ) && ! empty( $messages[ $_GET['message'] ] ) {
    echo "<script type='text/javascript'>alert('{$messages[ $_GET['message'] ]}');</script>";
}