
打開 Joomla 網站或後台,畫面卻是一片空白:沒有文字、沒有錯誤訊息,重新整理也一樣。這種「白畫面」(White Screen of Death)是 Joomla 站長最常遇到、也最不知道從哪裡下手的問題。
先記住一件事:白畫面其實就是錯誤頁。網站執行 PHP 時發生了嚴重錯誤,但主機設定成不把錯誤顯示出來,所以你只看到空白。有些瀏覽器會改顯示「HTTP ERROR 500」或「無法處理這個要求」,意思是一樣的。
所以解決白畫面的第一步不是亂改設定,而是把錯誤訊息找出來。下面依照實際排查的順序整理,內容以 Joomla 4/5 為準。
還在用 Joomla 3 的網站:Joomla 3 已經在 2023 年停止官方支援,不會再有安全性更新,而且很多白畫面就是舊擴充套件跟新版 PHP 不相容造成的。這次修好之後,建議規劃升級到目前仍有官方支援的 Joomla 版本。
動手之前
- 先備份:用主機控制台的備份功能,或 Akeeba Backup 這類備份元件,把檔案和資料庫都備份一份。
- 回想最近做了什麼:白畫面通常是某個變動之後才出現的,例如更新 Joomla、安裝或更新擴充套件、換樣板、主機升級 PHP 版本、網站搬家。先想起來,排查會快很多。
- 確認範圍:只有前台白、只有後台白,還是全部都白?只有某一頁白?只有前台白,通常跟樣板、前台模組或外掛有關;後台也白,比較可能是 PHP 版本、系統外掛或核心檔案的問題。
第一步:看錯誤記錄
最安全的做法是看錯誤記錄:不用改網站任何設定,訪客也看不到錯誤內容。
- 主機的錯誤記錄:cPanel 在「Metrics(指標)」區塊裡有「Errors(錯誤)」可以看最近的錯誤;很多主機也會在網站資料夾裡產生名為
error_log的檔案。DirectAdmin、Plesk 請在網站的記錄(Logs)頁面裡找。 - Joomla 自己的記錄:預設在
administrator/logs資料夾裡(實際位置以全域設定裡的記錄資料夾路徑為準)。
找到跟出錯時間相符、寫著 PHP Fatal error 的那幾行。它通常會寫出「什麼錯誤、哪個檔案、第幾行」,例如:
PHP Fatal error: Uncaught Error: Call to undefined function create_function() in /home/帳號/public_html/plugins/system/example/example.php:120光看路徑就知道,問題出在 plugins/system/ 底下名為 example 的外掛。
第二步:打開錯誤報告與除錯模式
記錄裡找不到,或主機沒有提供記錄時,就讓 Joomla 直接把錯誤顯示在畫面上。
後台還進得去
到後台「系統 → 全域設定」(System → Global Configuration):
- 「伺服器」(Server)分頁:把「錯誤報告」(Error Reporting)設成「最大」(Maximum)。
- 「系統」(System)分頁:把「除錯系統」(Debug System)設成「是」。
- 儲存後,回到白畫面的那一頁重新整理。
除錯模式開啟後,錯誤頁會列出完整的錯誤追蹤(哪個檔案呼叫了哪個檔案),比只有一行錯誤訊息更好判斷。
後台也是白的
用 FTP 或主機的檔案管理員,打開網站根目錄的 configuration.php,找到這兩行修改成:
public $error_reporting = 'maximum';
public $debug = true;- 舊教學常寫
'development',那是 Joomla 3 的寫法,現在用'maximum'就好。 configuration.php如果存不進去,可能被設成唯讀(權限 444),先改成 644 再修改,改完再改回來。
還是一片白:讓 PHP 直接顯示錯誤
有些錯誤發生得太早,Joomla 還來不及套用上面的設定。這時可以暫時在根目錄的 index.php(後台白畫面就改 administrator/index.php)最上面、<?php 那一行的下一行加入:
ini_set('display_errors', '1');
error_reporting(E_ALL);index.php 是核心檔案,這兩行只是暫時用來看錯誤,找到原因後一定要刪掉。
舊教學把這兩行加在 configuration.php 裡,但從後台儲存全域設定時,Joomla 會重新產生這個檔案,自己加的程式碼會不見,不建議這樣做。
找到原因後,記得把「錯誤報告」改回「系統預設」、「除錯系統」改回「否」,並刪掉加上去的程式碼。錯誤訊息會暴露網站的檔案路徑與程式資訊,不應該讓訪客看到。
第三步:看懂錯誤訊息
常見的錯誤訊息與處理方向:
Allowed memory size of ... bytes exhausted:記憶體不足,看下面第 5 點。Call to undefined function、Call to undefined method:常見於擴充套件或樣板跟目前的 PHP、Joomla 版本不相容,看第 1、2 點。Class "..." not found:擴充套件檔案不完整、版本不相容,或自動載入的快取過期,先看第 4 點清除快取。syntax error, unexpected ...:程式語法錯誤,通常是剛改過的檔案少了符號,或舊程式碼不支援目前的 PHP 版本。Failed to open stream、Permission denied:檔案不存在或沒有權限讀取,看第 6 點。- 錯誤路徑在
plugins/、modules/、components/底下:問題出在那個擴充套件。 - 錯誤路徑在
templates/底下:問題出在樣板或樣板覆寫。
常見原因與解法
1. PHP 版本不相容
最常見的情況是主機升級了 PHP,舊的擴充套件或樣板跟不上。例如 PHP 8 移除了 create_function()、each() 等舊函式,用到它們的程式就會直接當掉。反過來,Joomla 升級後也需要夠新的 PHP:Joomla 4 至少需要 PHP 7.2.5,Joomla 5 至少需要 PHP 8.1。
- 到主機控制台的 PHP 版本設定,確認目前使用的版本。
- 如果是主機剛升級 PHP 就出問題,可以先暫時切回原本的版本讓網站恢復,再去更新不相容的擴充套件。舊版 PHP 通常也已經停止支援,只適合當作緩衝。
- 後台進得去的話,「系統 → 系統資訊」(System Information)可以看到目前的 PHP 版本與設定。
2. 擴充套件衝突
錯誤訊息指向某個擴充套件,或白畫面是在安裝、更新某個擴充套件之後出現的,就先把它停用。
後台進得去:到「系統」的外掛管理(Manage → Plugins)或擴充套件管理,把可疑的外掛、模組停用,再重新整理前台確認。
後台進不去,有兩種方法:
方法一,用 FTP 把該外掛的資料夾改名,例如把 plugins/system/example 改成 plugins/system/example-off,Joomla 找不到檔案就不會載入它。網站恢復後,再把名稱改回來,到後台正式停用或更新。
方法二,用 phpMyAdmin 修改資料庫,把外掛設為停用。資料表名稱前面的前綴每個網站不同(寫在 configuration.php 的 $dbprefix),下面以 abc_ 為例:
UPDATE `abc_extensions`
SET `enabled` = 0
WHERE `type` = 'plugin' AND `folder` = 'system' AND `element` = 'example';folder 是外掛的類型,也就是 plugins/ 底下那一層資料夾的名稱(例如 system、content);element 是外掛本身的資料夾名稱。
升級到 Joomla 5 之後才出問題的話,也確認「Behaviour - Backward Compatibility」這個外掛是啟用的。還沒針對 Joomla 5 更新的擴充套件,很多要靠它提供的相容功能才能運作。
3. 樣板或樣板覆寫出錯
只有前台白、後台正常,很可能是樣板的問題:
- 到「系統 → 網站樣板樣式」(Site Template Styles),暫時把預設樣板換成 Joomla 內建的 Cassiopeia。
- 換了之後正常,問題就在原本的樣板,到樣板開發商網站確認有沒有支援目前 Joomla 與 PHP 版本的更新。
- 用 FTP 把樣板裡的
html資料夾暫時改名(例如把templates/你的樣板/html改成html-off),可以一次停用這個樣板的所有樣板覆寫。這樣就恢復的話,代表是某個覆寫檔跟新版 Joomla 不相容。
樣板覆寫是什麼、怎麼維護,可以參考Joomla 樣板覆寫教學。
4. 快取
更新擴充套件或 Joomla 之後,舊的快取檔案也可能造成錯誤,尤其是 Class "..." not found 這類訊息。
- 後台進得去:到「系統 → 清除快取」(Clear Cache)全部清除。
- 後台進不去:用 FTP 刪除
cache與administrator/cache兩個資料夾裡面的檔案,保留資料夾本身和裡面的index.html。
administrator/cache 裡的 autoload_psr4.php 記錄了擴充套件的程式位置。安裝或移除擴充套件後出現 Class not found,刪掉這個檔案,Joomla 會自動重新產生。
5. 記憶體不足
錯誤訊息是 Allowed memory size of ... bytes exhausted,代表 PHP 可用的記憶體(memory_limit)用完了。到主機控制台的 PHP 設定把 memory_limit 調高,或在網站根目錄的 .user.ini 加上:
memory_limit = 256M各種主機的調整方法,可以參考WordPress 記憶體不足怎麼解決,裡面主機控制台、.user.ini 的做法 Joomla 一樣適用(wp-config.php 那一個方法是 WordPress 專用的)。
調高了還是一直不夠,通常是某個擴充套件太吃資源,再回頭看第 2 點。
6. 檔案權限與網站搬家
網站剛搬家、或用 FTP 大量上傳檔案之後出現白畫面,檢查這幾項:
- 權限:資料夾 755、檔案 644。權限不足時 PHP 讀不到檔案;設成 777 反而有些主機會基於安全拒絕執行。後台進得去的話,「系統資訊」裡的「資料夾權限」(Folder Permissions)可以看到哪些資料夾無法寫入。
- 路徑設定:
configuration.php裡的$log_path、$tmp_path如果還是舊主機的路徑,要改成新主機的完整路徑。 - 資料庫連線:
$host、$user、$password、$db、$dbprefix要跟新主機的資料庫一致。 - 網站網址:
$live_site一般留空就好,填錯網址會造成各種奇怪的問題。
7. 核心檔案損壞
以上都排除了,最近也沒改過檔案,可能是更新中斷、上傳不完整,造成 Joomla 核心檔案損壞:
- 後台進得去:到「元件 → Joomla 更新」(Joomla Update),網站已經是最新版時,可以選擇重新安裝 Joomla 核心檔案。
- 後台進不去:先從
administrator/manifests/files/joomla.xml裡的版本號確認目前的版本,再到 Joomla 官方下載網站下載同一個版本的「Update Package」(升級套件),解壓縮後用 FTP 上傳覆蓋。
不要用「Full Package」(完整安裝套件)覆蓋正式網站,它包含安裝用的 installation 資料夾,留在正式網站上會有安全風險。
修好之後
- 把「錯誤報告」改回「系統預設」、「除錯系統」改回「否」。
- 刪掉在
index.php加上的程式碼。 - 更新所有擴充套件與樣板到最新版,停用並移除不再使用的擴充套件。
- 建立固定備份的習慣,下次出問題可以直接還原。
延伸閱讀
- Joomla 樣板覆寫(Template Override)教學:不改核心,修改文章與模組的輸出
- PHP「Cannot use object of type stdClass as array」錯誤:物件與陣列存取的差異與解法
- WordPress 記憶體不足(Allowed memory size exhausted)怎麼解決?修改 memory_limit 的 4 種方法
網站一出現白畫面,最怕的是找不到原因、又不敢亂動。正威網路行銷是 25 年經驗的基隆網頁設計工作室,也提供網站維護託管,網站需要有人幫忙顧的話,歡迎來聊聊。







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