為什麼必須在 PHP 中的 echo 之前設置 XHR 狀態?
也許這個問題屬於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()
。