Я решил это с помощью ob_start (). ob_start сначала записывает html в буфер, затем записывает его в браузер после изменения заголовка. ob_start идет перед вашим HTML-кодом. Нет необходимости, но рекомендуется закрывать буфер после header () с помощью ob_end_flush ();
Фрагмент header.php:
<?php
ob_start()
?>
<head>
<link rel="stylesheet" type="text/css" href="<?php echo BASEPATH; ?>/view/css/homepageStyle.css" />
</head>
<div id="header">
<div id="banner">
Pagoda
</div>
<div id="login">
<?php
//This controls the login/logout header on the top of each page.
global $session;
if ($session->isLoggedIn())
{
?>
<div id="nametag">
<form method="POST" name="logout" action="">
Welcome, <?php echo $session->getName()." (".$session->getRole().")"?>
<input name="logout" type="hidden" value="Log Out"/>
</form>
</div>
....
....
....
login.php
<?php
global $session;
global $view;
if (isset($_POST['login']))
{
if ($session->logIn($_POST["uname"],$_POST["password"]))
header("Location: $_SERVER[REQUEST_URI]");
ob_end_flush();
else
$view->RenderMsg("Your username and/or password was incorrect.");
}
if (isset($_POST['logout']))
{
$session->logOut();
header("Location: $_SERVER[REQUEST_URI]");
ob_end_flush();
}
?>