检测 HTTP 头是否已经发送 headers_sent

(PHP 4, PHP 5, PHP 7)

headers_sent — 检测 HTTP 头是否已经发送

说明

headers_sent([ string &$file [, int &$line ]]): bool

检测 HTTP 头是否已经发送。

HTTP 头已经发送时,就无法通过header()添加更多头字段。 使用此函数起码可以防止 HTTP 头出错。另一个解决方案是用输出缓冲

参数

file

若设置了可选参数fileandlineheaders_sent()会把 PHP 文件名放在file变量里, 输出开始的行号放在line变量里。

line

输出开始的行号。

返回值

HTTP 头未发送时,headers_sent()返回FALSE,否则返回TRUE

范例

Example #1 使用headers_sent()的例子

<?php

// 没有 HTTP 头就发送一个
if (!headers_sent()) {
    header('Location: http://www.example.com/');
    exit;
}

// 使用 file 和 line 参数选项的例子
// 注意 $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;
}

?>

淘宝 adsense 商品推荐

正版 Google AdSense实战宝典:用谷歌广告联盟出海赚美元 第2版 seo搜索引擎优化 广告营销 网站运营书籍 AdSense从入门到精通

价格:39.5元

注释

数据头只会在SAPI支持时得到处理和输出。

参见

ob_start()- 打开输出控制缓冲

trigger_error()- 产生一个用户级别的 error/warning/notice 信息

headers_list()- 返回已发送的 HTTP 响应头(或准备发送的)

header()- 发送原生 HTTP 头 中有更多相关细节的讨论。