0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

Joomla 白畫面(空白頁)怎麼辦?從錯誤記錄到擴充套件衝突的完整排查順序

9種Joomla空白頁(白屏)error的解決方案

打開 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):

  1. 「伺服器」(Server)分頁:把「錯誤報告」(Error Reporting)設成「最大」(Maximum)。
  2. 「系統」(System)分頁:把「除錯系統」(Debug System)設成「是」。
  3. 儲存後,回到白畫面的那一頁重新整理。

除錯模式開啟後,錯誤頁會列出完整的錯誤追蹤(哪個檔案呼叫了哪個檔案),比只有一行錯誤訊息更好判斷。

後台也是白的

用 FTP 或主機的檔案管理員,打開網站根目錄的 configuration.php,找到這兩行修改成:

PHP
public $error_reporting = 'maximum';
public $debug = true;
  • 舊教學常寫 'development',那是 Joomla 3 的寫法,現在用 'maximum' 就好。
  • configuration.php 如果存不進去,可能被設成唯讀(權限 444),先改成 644 再修改,改完再改回來。

還是一片白:讓 PHP 直接顯示錯誤

有些錯誤發生得太早,Joomla 還來不及套用上面的設定。這時可以暫時在根目錄的 index.php(後台白畫面就改 administrator/index.php)最上面、<?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_ 為例:

SQL
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. 樣板或樣板覆寫出錯

只有前台白、後台正常,很可能是樣板的問題:

  1. 到「系統 → 網站樣板樣式」(Site Template Styles),暫時把預設樣板換成 Joomla 內建的 Cassiopeia。
  2. 換了之後正常,問題就在原本的樣板,到樣板開發商網站確認有沒有支援目前 Joomla 與 PHP 版本的更新。
  3. 用 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 加上:

INI / php.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 加上的程式碼。
  • 更新所有擴充套件與樣板到最新版,停用並移除不再使用的擴充套件。
  • 建立固定備份的習慣,下次出問題可以直接還原。

延伸閱讀

網站一出現白畫面,最怕的是找不到原因、又不敢亂動。正威網路行銷是 25 年經驗的基隆網頁設計工作室,也提供網站維護託管,網站需要有人幫忙顧的話,歡迎來聊聊。

分享這篇文章

返回文章列表更多「joomla技術教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!