登錄 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 ……」 這樣的錯誤的常見原因和解決方法,如果是後期運營過程中出現這種情況一般是文件修改或者插件不兼容出現的問題,在解決這個問題之前要清楚出現問題的這段時間到底是修改了什麼,這樣才能快速的找到出現錯誤的最終原因,從而快速的解決問題。