![](/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.