當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。