
剛改完佈景主題的 functions.php,或是照著網路教學在 wp-config.php 加了一段設定,網站上方突然多出一大段英文:
Warning: Cannot modify header information - headers already sent by (output started at/home/帳號/public_html/wp-config.php:1) in/home/帳號/public_html/wp-includes/pluggable.phpon line 1450
有時候畫面上看不到這段字,卻發生其他怪事:登入後台時出現「Cookie 因為未預期的輸出而遭到封鎖」、存檔後沒有跳回原本的頁面、網站變成一片白。
這些狀況,很多都是同一個原因:某個檔案在不該輸出內容的時候,先送出了內容,常常只是一個看不見的空白。這篇說明這段訊息的意思,以及怎麼找到那個空白。
「headers already sent」在說什麼
瀏覽器打開一個網頁時,網站會先送出一些「標頭」(headers),例如「請轉到另一頁」「請存下這個 Cookie」,接著才送出網頁的內容。順序是固定的:標頭一定要在內容之前。
如果某個檔案提早送出了內容,哪怕只是一個空行,之後 WordPress 想送標頭時就來不及了,PHP 會出現這個警告:「無法修改標頭資訊,因為標頭已經送出了」。
轉址、登入的 Cookie 都是靠標頭送出的,所以這個錯誤常常讓登入失敗、存檔後不會跳頁。
從訊息找到出問題的檔案
這段訊息裡有兩個檔案,要看的是括號裡的那一個:
headers already sent by (output started at /home/帳號/public_html/wp-config.php:1)output started at 後面,就是提早送出內容的檔案,冒號後面的數字是行數。上面的例子是 wp-config.php 的第 1 行。
後面 in … pluggable.php on line 1450 的那個檔案,是 WordPress 想送標頭、卻發現來不及的地方,它是受害者,不用去改它。
我們在測試站重現了一次
我們在測試站放了一個只多了一個空行的 PHP 檔案:第 1 行是空白,第 2 行才是 <?php。
結果打開登入頁,網頁的第一個字元就是那個空行。送出帳號密碼後,打開警告顯示的話,會出現 6 條「Cannot modify header information」的警告,每一條都寫著 output started at …a185.php:1,指向那個檔案的第 1 行;登入也失敗了,畫面顯示「Cookie 因為未預期的輸出而遭到封鎖」。
一個看不見的空行,就足以讓整個後台登不進去。
最常見的 4 個原因
一、<?php 前面有空白。 PHP 檔案的第一行,<?php 前面不能有任何東西,包括空行和空格。從網路複製程式碼貼上時,最容易不小心多貼一個空行。
二、?> 後面有空白。 檔案最後如果有 ?>,後面多一個空行或空格,一樣會被送出。最簡單的做法,是只有 PHP 程式的檔案,結尾不要寫 ?>,WordPress 自己的核心檔案也是這樣寫的。
三、檔案存成了「UTF-8 with BOM」。 有些編輯器存檔時,會在檔案最前面偷偷加上幾個看不見的字元(BOM)。用肉眼完全看不出來,但對 PHP 來說,那就是內容。用 VS Code、Notepad++ 這類程式編輯器打開,看右下角或「編碼」選單,存成不含 BOM 的「UTF-8」。
四、程式提早輸出了東西。 在 functions.php 或外掛裡用了 echo、直接寫了 HTML,或是 PHP 的其他警告訊息被顯示在畫面上,也會讓內容提早送出。這時候 output started at 指到的那一行,通常就是 echo 或出現其他警告的地方。
修正的步驟
- 從訊息找出
output started at的檔案和行數。 - 用 FTP 或主機的檔案管理員,先下載一份備份,再打開那個檔案。
- 依照上面的 4 個原因檢查:開頭的空白、結尾的
?>和空白、檔案編碼、提早輸出的程式。 - 存檔、上傳,重新整理網站,確認警告消失、可以正常登入。
改檔案請用程式編輯器,不要用 Word 這類文書軟體,它們會加入格式或改掉引號。如果是改了 functions.php 之後網站直接掛掉,處理方式在〈WordPress 出現 500 錯誤怎麼辦?〉。
正式網站不要把警告顯示在畫面上
這段警告會把主機上的檔案路徑顯示給所有訪客看,正式的網站不應該把 PHP 警告直接顯示在畫面上。偵錯時可以暫時打開,修好之後記得關掉。functions.php 的安全寫法,可以參考〈WordPress functions.php 實用程式碼整理〉。
正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站管家年費包含系統、外掛與安全性更新和每日備份,台北與全台客戶也歡迎免費諮詢。






發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。