当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


PHP headers_sent()用法及代码示例


headers_sent()函数是PHP中的内置函数,用于确定标头是否已成功发送。如果成功发送头,则headers_sent()函数返回True,否则返回False。

用法:

bool headers_sent( $file, $line )

参数:该函数接受上述和以下描述的两个参数:


  • $file:此参数保存文件名。它是一个可选参数。
  • $line:此参数保存输出开始的行号。它也是可选参数。

如果设置了文件和行参数,则headers_sent()函数会将PHP源文件名和行号放在文件和行变量中开始输出的位置。

返回值:如果已发送标题,则此函数返回True,否则返回false。

示例1:

<?php 
  
// PHP program to illustrate headers_sent() function 
if(!headers_sent()) { 
    header("Location:https://en.wikipedia.org/wiki/Main_Page"); 
    exit(); 
} 
  
?>

输出:

在此示例中,之前未发送任何标头,因此!headers_sent()将为TRUE,然后标头(“ Location:https://en.wikipedia.org/wiki/Main_Page”);将发送标头信息,并按照标头将其重定向到参数中的网站。

注意:发送标头块后就无法添加标头。因此已实现此函数以避免类似的错误。

Warning: Cannot modify header information - headers already sent by 
(output started at /storage/ssd3/798/438108/public_html/gfg/header.php:1) 
in /storage/ssd3/798/438108/public_html/gfg/header.php on line 4

示例2:

<?php 
header("Expires: Sun, 25 Jul 1997 06:02:34 GMT"); 
?> 
  
<html> 
<body> 
    <p>hello world</p> 
      
    <?php 
      
    // header is being sent after header is 
    // sent and after output has been started. 
    header("Cache-Control: no-cache"); 
    header("Pragma: no-cache"); 
    ?> 
</body> 
</html>

注意:由于此处显示的示例不支持重定向和修改标头,因此无法在在线IDE中运行。因此,尝试在托管服务器或本地主机上运行它。
输出:

hello world

警告:

Warning: Cannot modify header information - headers already sent by
 (output started at /storage/ssd3/798/438108/public_html/gfg/header.php:4) 
in /storage/ssd3/798/438108/public_html/gfg/header.php on line 9

警告:无法修改标头信息-标头已由发送
(输出从/storage/ssd3/798/438108/public_html/gfg/header.php:4开始)
在第10行的/storage/ssd3/798/438108/public_html/gfg/header.php中


可以使用headers_sent()函数解决此错误。
示例3:解决以上错误后。

<?php 
header("Expires: Sun, 25 Jul 1997 06:02:34 GMT"); 
?> 
<html> 
<body> 
<p>hello world</p> 
<?php 
//if the header is has not been sent yet then new header will be sent 
if(!headers_sent()){ 
header("Cache-Control: no-cache"); 
header("Pragma: no-cache"); 
} 
?> 
</body> 
</html>

输出:

hello world


说明:
headers_sent()函数检查标头是否已发送。因此!headers_sent()返回false,因为没有为该标题再次发送,避免了错误。
注意:由于此处显示的示例不支持重定向和修改标头,因此无法在在线IDE中运行。因此,请尝试使用某些托管服务器或localhost。

示例4:

<?php 
  
// Function to retrive relative url to create  
// full url with provided relative url 
function server_url() { 
      
    $proto = "http" . 
        ((isset($_SERVER['HTTPS']) &&  
        $_SERVER['HTTPS'] == "on") ? "s" : "") . "://"; 
          
    $server = isset($_SERVER['HTTP_HOST']) ? 
        $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; 
          
    return $proto . $server; 
} 
  
// Function to redirecting relative url 
function redirect_rel($relative_url) { 
      
    $url = server_url() . dirname($_SERVER['PHP_SELF']) 
            . "/" . $relative_url; 
              
    // Check whether the header is sent or not 
    if (!headers_sent()) {  
          
        // If header not sent then sending header  
        header("Location: $url"); 
    } 
    else { 
          
        // If header sent then  
        echo "<meta http-equiv=\"refresh\" content=\"0;url=$url\">\r\n"; 
    } 
} 
redirect_rel("server.php"); 
  
?>

输出:

参考: http://php.net/manual/en/function.headers-sent.php



相关用法


注:本文由纯净天空筛选整理自gekcho大神的英文原创作品 PHP | headers_sent() function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。