本篇文章更新時間:2023/11/21
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
剛好最近卯起來更新我的外掛,希望讓日後作業更方便一點。今天就碰到一個神奇的問題,啟用外掛時出現了這個錯誤「這個外掛在啟用時產生了 X 個未預期輸出字元
」,但也沒有把這個「字元」給輸出,完全不知道錯在哪。
翻譯的原文在 wp-admin/plugins.php
,「The plugin generated %d character of unexpected output during activation.
」
有網友提供了下面的方法:
define('MXP_TEMP_FILE', ABSPATH . '/_MXP_TEMP_FILE.txt');
function mxp_activation_output_handler() {
$cont = ob_get_contents();
if (!empty($cont)) {
file_put_contents(MXP_TEMP_FILE, $cont);
}
}
function mxp_pre_output_action($action) {
if (is_admin() && file_exists(MXP_TEMP_FILE)) {
$cont = file_get_contents(MXP_TEMP_FILE);
if (!empty($cont)) {
echo ' Error Message:' . $cont . '';
@unlink(MXP_TEMP_FILE);
}
}
}
add_action("activated_plugin", "mxp_activation_output_handler");
add_action("pre_current_active_plugins", "mxp_pre_output_action");
放置在佈景(子)主題下的 functions.php
中就會有動作。
原理也不難,就是掛在 activated_plugin
與 pre_current_active_plugins
這兩個勾點,如有「不預期」的輸出,就補捉起來寫入到定義的一個檔案裡,然後如果檔案裡有輸出就讀取出來顯示並刪除這個暫存檔案。
不一定要用檔案來當媒介,暫存進 options
設定資料表也可以,總之關鍵就是 ob_get_contents()
這方法把這輸出捕捉到來顯示。
如此方式除錯,很快就找到問題來解決了。不然原本還真只有寫意外輸出了幾個字元,完全無頭緒。