joomla 3 發生錯誤 count(): Argument #1 ($value) must be of type Countable|array, null given
#################################################################
![]()
這是一個典型的 PHP 8 版本相容性問題。
在 PHP 7.3 之前的版本,對 null 執行 count() 函數只會回傳 0,但在 PHP 8.0 之後,這會直接拋出致命錯誤。由於 Joomla 3 的開發核心與許多第三方套件是在 PHP 5/7 時代設計的,當你將伺服器升級到 PHP 8+ 時,這類報錯就會接踵而至。
以下是修復此問題的步驟:
1. 快速修復(降低 PHP 版本)
如果你急著讓網站恢復運作,最簡單的方法是將主機控制台(如 cPanel 或 Plesk)的 PHP 版本調回 7.4。Joomla 3 完美支援 PHP 7.4,且不會觸發這個錯誤。
2. 找出錯誤源頭
如果你必須使用 PHP 8,你需要找出是哪個檔案出錯。
- 進入 Joomla 後台:系統 (System) -> 全域設定 (Global Configuration)。
- 切換到 伺服器 (Server) 標籤。
- 將 錯誤回報 (Error Reporting) 設定為 開發中 (Development) 或 最高 (Maximum)。
- 重新整理網頁,你會看到詳細的檔案路徑,例如: plugins/system/example/example.php on line 42
3. 修改程式碼 (核心邏輯)
找到出錯的檔案和行數後,你需要修改 count() 的調用方式。
錯誤範例:
if (count($this->items) > 0) { ... }
修復方式(方法 A:初始化為陣列): 確保變數在進入 count() 前不是 null。
$items = $this->items ?? [];
if (count($items) > 0) { ... }
修復方式(方法 B:強制轉型): 這是最快速的補丁,將 null 強制轉為空陣列。
if (count((array)$this->items) > 0) { ... }
常見發生位置
在 Joomla 3 中,這通常發生在以下地方:
- 分頁控制 (pagination.php)
- 選單模組 (mod_menu)
- 未更新的第三方外掛 (Plugins) 或 模板 (Templates)
注意: Joomla 3 已於 2023 年 8 月停止官方支援。為了長期的安全性與效能,強烈建議計畫將網站遷移至 Joomla 4 或 5。
#################################################################
![]()
這個錯誤算是在PHP7升級到PHP8最常見的
確實
在其他程式幾乎不能用 count len 或是一些計數功能在 空物件上
但是在 PHP7可以
所以
當你允許
就會被寫下
就會被執行
最簡單解決方法就是在 count 後面加上 (array) 強制轉 最簡單

留言板
歡迎留下建議與分享!希望一起交流!感恩!