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) 強制轉 最簡單