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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。