EC-CUBE4 EC-CUBE4.2 500エラー Composer PHP PHPエラー

EC-CUBE 4.2をPHP 8.2で動かすと、トップページを開いた時点で次のエラーが出て500になります。原因は同梱のCarbon 2.62.0がPHP 8.2の仕様変更に対応していないことで、composer update nesbot/carbon --with-dependenciesでCarbonを2.72.6に上げると解消します。

Carbon\Carbon::setLastErrors(): Argument #1 ($lastErrors) must be of type array, bool given, called in /path/to/eccube/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php on line 98

このエラーは、2026年10月のPHPの緊急セキュリティ修正(CVE-2026-109618 / CVE-2026-109619)をきっかけに見つけたものです。修正版はPHP 8.2以降にしか配布されなかったため、PHP 8.1で動いているEC-CUBE 4.2を8.2に上げられるかを調べたところ、最初にこのエラーで止まりました。

なお、EC-CUBE 4.2の公式の動作環境はPHP 8.1までです。8.2で動かす場合は、この記事の確認範囲を前提に、自分の環境で確かめてから切り替えてください。

なぜPHP 8.2でだけ出るのか

PHP 8.2から、DateTime::getLastErrors()はエラーが無いときに配列ではなくfalseを返すようになりました。Carbon 2.62.0はこの戻り値を、配列しか受け付けないsetLastErrors()にそのまま渡しているため、日付を1つ作るだけで型エラーになります。Carbon側は2.62.1でfalseも受け付けるように直っています。

EC-CUBE 4.2では、トップページなどに置かれるカレンダーブロックがCarbon::now()を呼んでいます。このブロックを表示するページはすべて同じエラーになるので、サイト全体が開けない状態になります。

Carbonを更新する

EC-CUBEのプロジェクトで次のコマンドを実行します。composer.jsonのconfig.platform.phpが7.4のままでも問題なく解決できます。

composer update nesbot/carbon --with-dependencies

EC-CUBE 4.2.0のcomposer.lockに対して実行した結果、composer.lockの変更は次の5件でした。doctrine/dbalが3.4系のままでも、Carbonの依存先であるcarbonphp/carbon-doctrine-typesは1.0系が選ばれるので、DBまわりのパッケージは更新されません。

  - Locking carbonphp/carbon-doctrine-types (1.0.0)
  - Upgrading nesbot/carbon (2.62.0 => 2.72.6)
  - Locking psr/clock (1.0.0)
  - Upgrading symfony/polyfill-mbstring (v1.26.0 => v1.31.0)
  - Upgrading symfony/polyfill-php80 (v1.26.0 => v1.31.0)

修正の入った最小のバージョンは2.62.1ですが、2.72.6未満のCarbonには別の脆弱性(CVE-2025-22145)があり、最近のComposerはそうしたバージョンを既定で選びません。上のコマンドで2.72.6が選ばれるので、そのまま使うのが確実です。

Carbonを直した後にPHP 8.2で確認できたこと

Carbonを2.72.6にしたEC-CUBE 4.2をPHP 8.2で動かし、PHP 8.1の環境と同じリクエストを流して比べました。フロント・管理画面・カート投入の150件ほどで応答コードとリダイレクト先がすべて一致し、商品ページとカートの表示金額も同じでした。本番と同じAPP_ENV=prodでの確認は修正の最小版の2.62.1で行い、こちらも応答コードは一致してエラーログも空でした。

PHP 8.2で増えたのは「Creation of dynamic property」の非推奨通知だけで、EC-CUBE本体、決済系のプラグイン、独自のカスタマイズからも出ていました。8.2では動作に影響しませんが、PHP 9で動かなくなる書き方なので、いずれ直す対象として記録しておきます。composer.lockにあるlaminas/laminas-code 4.6.0は「PHP 8.2未満」と宣言していますが、実際の動作には問題ありませんでした。

購入確定、決済、会員ログイン後の画面は確認していません。またEC-CUBE 4.2の公式の動作環境はPHP 8.1までなので、8.2で動かす場合は、この確認範囲を前提に自分の環境で確かめてから切り替えてください。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEに関するお問い合わせ


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ