我有一个页面,其中包含我在此文件中的navbar.php,其中有一个部分用于注销用户,并在成功时将用户带到登录页面:
<?php
//initialize the session
if (!isset($_SESSION)) {
session_start();
}
// ** Logout the current user. **
$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true";
if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){
$logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){
//to fully log out a visitor we need to clear the session varialbles
$_SESSION['MM_Username'] = NULL;
$_SESSION['MM_UserGroup'] = NULL;
$_SESSION['PrevUrl'] = NULL;
unset($_SESSION['MM_Username']);
unset($_SESSION['MM_UserGroup']);
unset($_SESSION['PrevUrl']);
$logoutGoTo = "index.php?page=login";
if ($logoutGoTo) {
header("Location: $logoutGoTo");
die();
}
}
?>
在包含导航栏的页面上,我有php上传文件并写入数据库,但成功后它还需要转到网址,它会输出警告&#34;标题已经发送&#34; ,我需要这个工作,因为页面似乎是&#34;无用&#34;显示时(即Tab键成为链接,不打开选项卡) 这是用于文件上传的PHP的一小部分:
// Upload success URL. User will be redirected to this page after upload.
define('SUCCESS_URL','index.php?page=update_about');
header('Location: ' . SUCCESS_URL);
die();
break;
} // while(true)
// Errors. Show upload form.
$message = join('',$errors);
showUploadForm($message);
}
答案 0 :(得分:1)
您无法在内容后发送标头,这是不可能的。有两种选择(afaik)。 第一个正确的方法是重新考虑您的代码及其工作原理。如果您需要在内容之后发送标题,那么您就会做错事。
第二种方法是作弊并使用output buffering。来自ob_start()
:
此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(标头除外)发送输出,而是将输出存储在内部缓冲区中。
此函数将发送最顶层输出缓冲区的内容(如果有)并关闭此输出缓冲区。如果要进一步处理缓冲区的内容,则必须在ob_end_flush()之前调用ob_get_contents(),因为在调用ob_end_flush()之后将丢弃缓冲区内容。