簡體   English   中英

為什么收到警告:無法修改標頭信息-標頭已經發送過(輸出從...開始)?

[英]Why am I getting Warning: Cannot modify header information - headers already sent by (output started at …)?

我正在重用搜索PHP腳本,但出現此錯誤:

警告:無法修改標頭信息-已在/ Volumes / Work / MAMP / PC Flag / includes / search.php中發送的標頭(輸出從/ Volumes / Work / MAMP / PC Flag / php_scripts / conection.php:2開始) 63行

第2行corction.php:

$con = mysqli_connect("localhost", "root", "root", "cms");

第63行search.php:

header('Location: search-page.php?keywords=' . urlencode($keywords));

問題是什么?

我還需要提到的是,該腳本不再像應有的那樣將我重定向到search-page.php。

當您使用header()它之前不應有任何輸出,甚至也不能有空格,您有兩種解決方案:

骯臟的一

在標頭之前使用ob_clean()清理輸出緩沖區

ob_clean();
header('Location: search-page.php?keywords=' . urlencode($keywords));

糾正一個

在腳本和請求路徑中搜索任何輸出, <?php之前的內容, echo es,HTML代碼, ?>之后的print?>后的空格通常是造成此問題的原因;)

除錯

該代碼段可以幫助您找出代碼輸出的位置:

var_dump(ob_get_contents());die()

將此放在第63行之前

JavaScript解決方法

萬一一切失敗,您可以使用javascript進行重定向,盡管我建議您繼續嘗試,但請注意:)

header(...)替換為:

echo '<script>window.location.href="search-page.php?keywords=' . urlencode($keywords)) . '";</script>';

您已經發送了標頭作為錯誤狀態。 請調查何時以及如何發送標頭

當在該行之前的某些內容打印到輸出緩沖區時,通常會發生這種情況。

確保您使用的是UTF-8 without BOM文檔編碼的UTF-8 without BOM -BOM符號在大多數文本編輯器中不可見,但可以解釋為強制發送HTTP標頭的內容。

您可以使用輸出控制功能調試輸出

之所以這樣,是因為已經發送了輸出。 回顯任何內容后都無法編輯標題信息!

您似乎收到的錯誤是因為發生了輸出。您可以使用以下代碼對其進行修復:

if (headers_sent()) {
    ob_clean();
}  

剛找到這個詳細答案

暫無
暫無

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

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