我在 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>
我希望得到警告'无法修改标题信息 - 标题已经由'发送,但令人惊讶的是它会将我重定向到网址http://www.espncricinfo.com/
?
为什么?
答案 0 :(得分:1)
如果你以某种方式使用output buffering - manually,或者因为your PHP is configured to automatically这样做 - 你仍然可以添加标题,只要初始缓冲区没有被刷新。
输出缓冲的作用是名称提示:将输出放在缓冲区中以便稍后发送,而不是立即输出数据。因此,只要没有发送HTTP response message的正文数据,您仍然可以发送标题数据。
要检查PHP是否配置为自动缓冲输出,您可以执行以下操作之一:
output_buffering
var_dump( ini_get( 'output_buffering' ) );
phpinfo();
(转储整个配置)并搜索字符串output_buffering
如果启用了输出缓冲,则该值将是缓冲区大小(以字节为单位)(如果已配置),或"On"
或true
,或类似的效果。