簡體   English   中英

為什么我沒有收到“警告:無法修改標頭信息-標頭已經發送”的信息,我希望得到它?

[英]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服務器。

我在這台機器上使用以下瀏覽器:

  1. Google Chrome(版本62.0.3202.94(正式版本)(64位))
  2. Firefox Quantum(57.0.1(64位))
  3. Opera(版本:49.0.2725.47)
  4. 微軟Edge 41.16299.15.0

我知道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是否配置為自動緩沖輸出,可以執行以下操作之一:

  1. 檢查php.ini配置文件並搜索字符串output_buffering
  2. var_dump( ini_get( 'output_buffering' ) );
  3. phpinfo(); (轉儲整個配置)並搜索字符串output_buffering

如果啟用了輸出緩沖,則該值將是緩沖區大小(以字節為單位)(如果已如此配置), "On"true或與此相關的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM