登入 WordPress 後臺的時候突然發現 WordPress 登入介面提示 「Warning: Cannot modify header information – headers already sent by (output started at /www/wp-content/themes/pozhejun/function.php:1) in /www/wp-login.php on line 21」 的錯誤資訊,其它頁面都可以正常訪問,就是不能進入後臺。
其實,出現這種情況一般都是因為程式修改過程中出現以下幾個方面的錯誤操作導致:
原因一、 UTF8 編碼和 BOM 衝突 (最常見)
如果你登入後臺出現類似 Warning: Cannot modify header information – headers already sent by (output started at /www/wp-content/themes/pozhejun/function.php:1) in /www/wp-includes/pluggable.php on line 897
Warning: Cannot modify header information – headers already sent by (output started at /www/wp-content/themes/pozhejun/function.php:1) in /www/wp-login.php on line 21
這些 php 程式碼錯誤,首先考慮是不是 function.php 、 wp-login.php 、 pluggable.php 這三個 PHP 檔案的編碼出現了問題。一般很有可能是用 txt 檔案編輯過這幾個報錯的檔案導致 UTF8 編碼和 BOM 衝突。
解決方法:使用 Notepad++、 UltraEdit 、 DW 等編輯器編輯檔案,在 「修改」 選單裡面選擇 「標題/編碼」,將檔案編碼修改為原本的 gkb 或者 utf-8 格式。當然你也可以把檔案另存為,選 ANSI 儲存。
原因二:程式檔案<?php 之前或者之後有空格 (最常見)
解決方法:無論是程式本身 echo 出來的、被 include 進來的程式 echo 的還是 php 程式碼之外的 HTML 存在空格它們統統都是輸出。所以,要檢查下出錯的 fuction.php 等檔案中的<?php..?> 是不是因為空格或者換行導致的,特別是 include 或者 require 的檔案。刪除空格就能夠解決,這也是最常見的報錯原因之一。
原因三:外掛相容問題 (常見)
如果是安裝 WordPress 外掛或者自己寫的程式出現以上問題,除了以上兩種可能,還有可能是 setcookie 的問題。
解決辦法:在輸出內容之前,產生 cookie,可以在程式的最上方加入函式 ob_start(); 把下面函式加到檔案的開頭。
<?php ob_start (); ?>
原因四:php.ini 配置問題
解決辦法:開啟 php.ini 然後把 output_buffering 設為 on , 重啟 appache 即可。這種方法開啟了所有 php 程式的輸出快取,這樣做可能影響 php 執行效率,這取決於伺服器的效能和程式碼的複雜度。
原因五:header 後加 exit()
解決方法:在 header 後加上 exit();
header ("Location: xxx");
exit();
以上就是 WordPress 出現 「Warning: Cannot modify header information – headers already sent by ……」 這樣的錯誤的常見原因和解決方法,如果是後期運營過程中出現這種情況一般是檔案修改或者外掛不相容出現的問題,在解決這個問題之前要清楚出現問題的這段時間到底是修改了什麼,這樣才能快速的找到出現錯誤的最終原因,從而快速的解決問題。