![](/img/trans.png)
[英]Why am I getting Warning: Cannot modify header information - headers already sent by (output started at …)?
[英]Why I'm not getting a 'Warning: Cannot modify header information - headers already sent by' as I expected to get one?
我在Windows 10家庭单一语言版本上运行的计算机上使用PHP 7.1.11 。
我在机器上使用XAMPP服务器。
我在这台机器上使用以下浏览器:
我知道header()
函数的详细信息及其工作方式。
但是,在上述四种Web浏览器上,以下程序的运行方式确实很怪异。 即使在将输出发送到客户端之后,header()函数仍在工作。
这怎么可能?
以下是我的代码(将其重定向到我提到的URL):
<!DOCTYPE html>
<html>
<body>
<p>Welcome to my website!</p><br />
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if($test) {
echo 'Welcome to my website<br />You\'re in!';
} else {
header('Location: http://www.espncricinfo.com');
}
?>
</body>
</html>
我原本希望收到警告“无法修改标头信息-标头已发送”,但令人惊讶的是它将我重定向到了URL http://www.espncricinfo.com/
?
为什么?
如果您以某种方式使用输出缓冲 (无论是手动操作还是由于PHP配置为自动执行此操作),只要未刷新初始缓冲区,仍然可以添加标头。
名称所暗示的是输出缓冲的作用:将输出放在缓冲区中,以便稍后发送,而不是立即输出数据。 因此,只要未发送HTTP响应消息的正文数据,您仍然可以发送标头数据。
要检查PHP是否配置为自动缓冲输出,可以执行以下操作之一:
output_buffering
var_dump( ini_get( 'output_buffering' ) );
phpinfo();
(转储整个配置)并搜索字符串output_buffering
如果启用了输出缓冲,则该值将是缓冲区大小(以字节为单位)(如果已如此配置), "On"
或true
或与此相关的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.