headers_sent总是返回true。无法重定向

时间:2016-01-11 23:38:10

标签: php redirect login header

我已经创建了登录页面和登录页面。登录页面的PHP代码是:

<?php
  session_start();
  include 'functions.php';
  if(isValid()){
    header('Location: logged.php');
    exit;
  }
?>

并且记录页面的代码是:

<?php
  session_start();
  include 'functions.php';
  if(!isValid()){
    header('Location: login.php');
    exit;
  }
?>

此代码之前没有任何内容。在代码之后,login.php页面中有登录表单,以及logged.php页面中的一些信息。

isValid()函数是正确的,因为我已经使用isvalid.php页面测试了它,当用户正确记录时返回1,如果没有用户登录或者会话中保存的信息错误,则返回0。 / p>

如果我使用login.php页面中的表单登录,我可以在logged.php页面中看到所有信息。如果我尝试返回login.php,我将被重定向到logged.php。

如果我没有登录并且我尝试访问logged.php,则输出是一个空白页面,没有任何重定向到login.php页面。 PHP应该将我重定向到登录页面!

我在另一个讨论中看到过建议调试是否有一个带有headers_sent()函数的输出。

当我输入像这样的调试代码时

<?php
  if(headers_sent())
    echo "TRUE";

在第一行中,它在记录的页面中返回TRUE,在登录页面中没有任何内容。

有什么问题?

1 个答案:

答案 0 :(得分:0)

详细阐述Fraceskix评论:

脚本中标记之外的任何内容都被视为输出,因此会导致标题被发送。

此外,一些文本编辑器会自动在末尾添加换行符。例如,vim按outlined here的方式执行此操作。这意味着如果你有一个包含关闭php标记的包含文件,它可能正在发送内容,因此也就是标题。

最简单的方法是不要在只包含php的文件中关闭你的php标签。事实上,这是part of the psr-2 standard for this reason