Php

為什麼必須在 PHP 中的 echo 之前設置 XHR 狀態?

  • April 29, 2020

也許這個問題屬於Stack Overflow或其他網站,在這種情況下,請告訴我,不要只是投反對票;我很樂意移動它。

無論如何,我只是在學習伺服器管理的基礎知識,當我遇到一些我沒有預料到的事情時,我正在筆記型電腦上使用我自己的小型私有 MySQL 伺服器。當我使用 jQuery $.ajax()方法向 PHP 頁面發送 AJAX 請求時,即使我http_response_code(500);在 PHP 程式碼中呼叫了該函式,我仍會繼續獲得“200”的響應程式碼。echo在我意識到我正在使用語句將數據返回到 Javascript 頁面之前,我無法弄清楚為什麼會發生這種情況,並且通過將http_response_code(500);函式移動到所有語句之上echo,它會正確設置 HTTP 響應程式碼。

**我知道這是正確的功能,我只是想知道為什麼會這樣?**為什麼必須在使用 echo 函式之前設置 HTTP 響應程式碼?底層協議發生了什麼?我的猜測是它與echo強制腳本在呼叫時返回數據有關,但是為什麼要執行以下腳本:

echo "thing one";
echo "thing two";
http_response_code(500);
echo "thing three";

…仍然回顯“第三件事”就好了,但不更改響應程式碼?

我本身沒有“問題”,我只是來學習的!謝謝!

當您在正文上列印任何內容時,標題必須已經發送。那是如果您例如echo()某些東西,或者即使在<?php. Web 伺服器在發送標頭之前根本無法輸出任何內容,因為這是 HTTP 響應的形式,導致任何輸出也發送標頭。

如果您嘗試使用header()發送標頭的 eg,您可能會得到一個Warning: Cannot modify header information - headers already sent by.

請記住, header()必須在發送任何實際輸出之前呼叫它,無論是通過普通 HTML 標記、文件中的空白行還是通過 PHP。include使用, or  , 函式或其他文件訪問函式讀取程式碼是一個非常常見的錯誤 ,並且在 呼叫require之前輸出有空格或空行 。header()使用單個 PHP/HTML 文件時也存在同樣的問題。

因為http_response_code()不發送 HTTP 頭,只是準備稍後發送的頭列表,所以不會觸發這個錯誤。雖然headers_sent()if條件中使用可以防止這些錯誤header(),但在使用 時也可以用於調試問題http_response_code()

引用自:https://serverfault.com/questions/1014724