headers_sent
(PHP 3 >= 3.0.8, PHP 4, PHP 5)
headers_sent -- 检查标头是否已被发送以及在哪里被发送
说明
bool
headers_sent
( [string &file [, int &line]] )
如果 HTTP 标头尚未被发送出去的话,
headers_sent()
将返回
FALSE
,否则返回
TRUE
。如果指定了可选参数
file
和
line
,
headers_sent()
将会把 PHP 的文件名以及从哪一行开始有输出放到
file
和
line
变量中。
一旦标头已经被发送,将不能再使用
header()
函数来发送其它的标头。使用此函数至少可以避免避免与
HTTP 标头有关的错误信息。另一个选择是使用
输出缓存
。
注:
可选参数
file
和
line
是 PHP 4.3.0 版添加的。
例子 1.
headers_sent()
例子
<?php
// 如果尚未发送标头,发送一个
if (!
headers_sent
()) {
header
(
'Location: http://www.example.com/'
);
exit;
}
// 一个使用可选参数 file 和 line 的例子,自 PHP 4.3.0 起
// 注意 $filename 和 $linenum 被传递进来用于后续代码,不要预先赋值
if (!
headers_sent
(
$filename
,
$linenum
)) {
header
(
'Location: http://www.example.com/'
);
exit;
// 这里就触发了一个错误
} else {
echo
"Headers already sent in $filename on line $linenum
\n
"
.
"Cannot redirect, for now please click this <a "
.
"href=\"http://www.example.com\">link</a> instead\n"
;
exit;
}
?>
|
|
相关问题的详细讨论参见
ob_start()
,
trigger_error()
和
header()
。