这里需要注意的 header() 最常被拿來送 header('Location: /'); 等等, 做网页重定向的动作。
在使用 setcookie(), header()... 等函数前 不可以用任何的输出。若必须怎需要用log记录。
如果有输出 则headers_sent将会返回 true。
我在使用TP 直接用 php 命令运行时( php index.php /Home/Login/test) 发现没有返回输出,查看发现,
里面有$this->redirect("")函数,此函数间接调用了redirect函数,如下:
/**
* URL重定向
* @param string $url 重定向的URL地址
* @param integer $time 重定向的等待时间(秒)
* @param string $msg 重定向前的提示信息
* @return void
*/
function redirect($url, $time=0, $msg='') {
//多行URL地址支持
$url = str_replace(array("\n", "\r"), '', $url);
if (empty($msg))
$msg = "系统将在{$time}秒之后自动跳转到{$url}!";
if (!headers_sent()) {
// redirect
if (0 === $time) {
header('Location: ' . $url);
} else {
header("refresh:{$time};url={$url}");
echo($msg);
}
exit();
} else {
$str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
if ($time != 0)
$str .= $msg;
exit($str);
}
}
说明只执行了了header('Location: ' . $url);的发送让后就exit(); 命令行的运行不能接收到 header的内容 目前不知道 为什么?
如果在 header('Location: ' . $url);之前有 打印输出 如echo 就可以接收到<meta http-equiv='Refresh' content='0;URL=./Login/logout'>的信息。
如有知道的 请留言。