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
相關用法
- PHP dir()用法及代碼示例
- PHP each()用法及代碼示例
- PHP each()用法及代碼示例
- PHP Ds\Map put()用法及代碼示例
- PHP Ds\Map xor()用法及代碼示例
- PHP key()用法及代碼示例
- PHP tan( )用法及代碼示例
- PHP pos()用法及代碼示例
- PHP min( )用法及代碼示例
- PHP max( )用法及代碼示例
- PHP Ds\Set xor()用法及代碼示例
- PHP abs()用法及代碼示例
- PHP cos( )用法及代碼示例
- PHP end()用法及代碼示例
注:本文由純淨天空篩選整理自gekcho大神的英文原創作品 PHP | headers_sent() function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。