PHP我应该在ob_start之后使用ob_clean

时间:2013-10-02 14:33:02

标签: php mysql header ob-start

我在php和mysql中创建了一个简单的登录系统,但我一直收到错误,说已经发送了标题,并且使用ob_start修复了这个问题,但我不确定我是否应该在之后的页脚使用ob_clean?< / p>

另外,当我登录帐户页面时,错误就出现了,说已经在previuos页面中发送了标题 - &gt; header(“Location:account.php”);但是我必须在用户登录时重定向。

我的登录页面如下所示

require_once('models/init.php');  // db connection and other functions
include('header.php');  // some html code for the header, with one line php-function to check if user is logged in, if so show "home" tab instead of "login"


{ 

  php code to check if username/pass matches etc, and if so redirect to account page

  header("Location: account.php");

}

 echo "<form>" // display the login form

include("footer"); // including footer, some html/js code.

如果我在header.php文件中使用ob_start,则上面的代码可以正常工作。但是我应该在footer.php文件中使用ob_clean吗?

对不起,如果有什么不清楚,英语不是我的第一个憔悴

谢谢!

2 个答案:

答案 0 :(得分:3)

一般原则是您无法在echo之前使用header()。所以,这永远不会奏效:

echo "this is my header";
header("Location: account.php");
echo "this is my footer";

但是,如果你先发送标题,一切正常:

header("Location: account.php");
echo "this is my header";
echo "this is my footer";

在您的情况下,您应该在包含标题之前进行检查:

require_once('models/init.php');  // db connection and other functions

if ($user_is_logged_in) { // Do your check here
    header("Location: account.php");
}

include('header.php');  // some html code for the header, with one line php-function to check if user is logged in, if so show "home" tab instead of "login"
echo "<form>" // display the login form
include("footer"); // including footer, some html/js code.

答案 1 :(得分:1)

ob_start()捕获输出(否则将打印或回显)。如果您不需要回显输出或对其执行任何操作,那么只需在完成时使用ob_end_flush()