私が2019年にJoomla!をPHP 7系へ上げた際のエラーメモに、2021年の表示不具合とDB接続の記録をまとめました。2026年11月に、古い対処と現在使える説明を分けて見直しました。
PHP 5.6と7系はサポート終了済みです。Joomla! 2.5に加え、3系も公式サポートを終了しています。今から使う人には、対応する拡張機能とテンプレートを確認したうえで、サポート中のJoomla!・PHPへの移行を勧めます。以下のコードは旧環境での記録で、現在の本番環境への一括適用を想定していません。
PHPの終了版一覧、Joomla! 2.5の公式案内、Joomla! 3の公式案内、Joomla!の現行ロードマップを参照しています。
count(): Parameter must be an array or an object that implements Countable
2019年7月、PHP 7.3へ変更した際にmod_mb2portfolioのcount()で警告が出ました。元のエラー文を残します。
Warning: count(): Parameter must be an array or an object that implements Countable in 〇〇/〇〇/〇〇/modules/mod_mb2portfolio/tmpl/default.php on line 51
変更前のコードです。比較式をcount()へ渡していました。
if (count($items>0)){
当時は次のように直しました。ただし、isset()だけでは配列やCountableであることを確認できません。これは修正途中の記録です。
if(isset($items) and count($items) > 0){
見直し後の条件式は次の形です。is_countable()はPHP 7.3以降で使えますが、PHP 7.3自体の利用を勧める意味ではありません。
if (isset($items) && is_countable($items) && count($items) > 0) {
// 配列または Countable の要素がある場合の処理
}
PHP 7.2からcount()の引数が非対応型なら警告が出ます。PHP 8ではTypeErrorになります。元々配列が入る設計なら、条件式で避けるだけでなく、$itemsの取得元も調べます。count()の公式説明とis_countable()の公式説明が根拠です。
basemenu.php:”continue” targeting switch is equivalent to “break”
2019年7月、PHP 7.3へ変更した際の警告です。対象はlibraries/expose/core/menu/basemenu.phpでした。
Warning: “continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”? in /www/◯◯◯/libraries/expose/core/menu/basemenu.php on line 178
私が当時行った変更は次のとおりです。
#178 continue; を break; に変更しました。
switchを抜ける意図ならbreakを使います。switchの外側にあるループの次の反復へ進む意図ならcontinue 2です。一般のループでbreakとcontinueが同じ意味になるわけではありません。元の処理の意図を確かめて選びます。現行環境でこのExposeの版が使えるかは未確認なので、フレームワークの更新・置換も確認します。PHPのcontinueの説明を参照してください。
Fatal error: Redefinition of parameter $recipient
2019年8月、ExtraWatchのインターフェースと実装側でエラーが出ました。元の記事に残した2つの表示です。2つ目は記録自体が短く、ここにないエラー文を補ってはいません。
Fatal error: Redefinition of parameter $recipient in /◯◯◯/components/com_extrawatch/src/env/interface.extrawatch.env.php on line 49
Fatal error: /◯◯◯/components/com_extrawatch/src/env/joomla/class.extrawatch.env.joomla.php on line 122
PHP 7以降、同じ仮引数名を重複して宣言できません。先に拡張機能の対応版への更新や置換を確認します。以下は当時の暫定対応です。
重複する仮引数名を修正する(過去の暫定対応)
変更前です。
public function sendMail($recipient, $sender, $recipient, $subject, $body, $true, $cc, $bcc, $attachment, $replyto, $replytoname);
当時の変更後です。
public function sendMail($recipient, $sender, $recipient_1, $subject, $body, $true, $cc, $bcc, $attachment, $replyto, $replytoname);
変えたのは関数名sendMailではなく、重複する仮引数名です。インターフェースの一行だけを変えればよいとは限りません。実装との整合を確認します。元の記事には「Extensions → Modules (Site) → ExtraWatch Agent Module → OFF」という停止の記録もありますが、現在の画面と対応状況は未確認です。PHP 7の非互換変更を参照しています。
Warning: A non-numeric value encountered in
2019年8月、テンプレートの幅を計算する部分で警告が出ました。
Warning: A non-numeric value encountered in /◯◯◯/templates/theme2035/includes/includes.php on line 94
変更前です。
$mainContentWidth = 12 – ($asideLeftWidth + $asideRightWidth);
当時は左右の幅を整数へキャストしました。次のコードは、その暫定対応を残したものです。
$mainContentWidth = 12 – ((int)$asideLeftWidth + (int)$asideRightWidth);
一律に(int)を付けても値の正しさは保証できません。幅の取得元、型、許容範囲を確認します。PHP 8では数値として扱えない文字列の算術がTypeErrorになるため、警告だけを消す対処として使わないようにしました。PHP 8の非互換変更を参照しています。
You are not permitted to use that link to directly access that page (#4).
ここからは2021年6月の別の記録です。Joomla! 2.5で、ページを開くときとログイン後にページを選ぶときに、同じ案内が出ました。
You are not permitted to use that link to directly access that page (#4).
当時の私は、サーバーのPHPが5.2から7.1へ変更されていたと記録しています。PHPを5.6へ戻したあとに表示できましたが、変更履歴と症状の因果関係は外部資料では未確認です。同じ案内が出るすべての環境に、この原因を当てはめることはできません。
この切替は旧環境の一時復旧の記録です。現在はPHP 5.6へのダウングレードを解決策として勧めません。対応するテンプレートと拡張機能を選び、サポート中の環境へ移す方針で見直します。下の画像は症状と当時の管理画面を残したものです。





Database connection error (2): Could not connect to MySQL.
こちらは2021年11月のDBへ接続できなかったときの記録です。DB接続エラーを調べる途中で、phpMyAdminの簡単インストールがPHPの要件で止まりました。元のエラーは「Database connection error (2): Could not connect to MySQL.」です。
phpMyAdminの簡単インストールができない
PHP 7.1.3+ is required.
Currently installed version is: 5.6.40
表示されていたのは「PHP 7.1.3+ is required. Currently installed version is: 5.6.40」です。これは当時のインストーラーの要件で、現在のphpMyAdminの要件ではありません。
当時はPHP 7.1へ切り替えてインストールできたと記録しました。一方でJoomla!のテンプレートがPHP 7に対応していない問題も残っていました。管理ツールをインストールできたことと、CMSの互換性やDB接続の問題を解決できたことは分けて考えます。


今は、CMS・テンプレート・DB接続設定を検証し、サポート中のPHPへ移行する前提で調べます。導入するphpMyAdminの要件は公式配布先で版ごとに確認します。この記事では現在の必要バージョンを未確認のまま書き足していません。
