EC-CUBE3 とWordPressが同居しているレンタルサーバで、不思慮に PHP 設定を7.1から 7.4 へ上げたところ、 EC-CUBE3 の PHP 要件を逸脱してしまい、 プルダウン メニューが 崩れ てしまう不具合に遭遇したので対策しました。
EC-CUBE3をPHP7.4で動かしてしまうと
WordPressの管理画面でPHPのバージョンが古いとの警告から、何気なくレンタルサーバの管理画面でPHPのバージョンをそれまでの7.1から7.4へ移行させたのが、事の始まり。
WordPressはそれで良いのでしょうが、同じWebインスタンスに同居しているEC-CUBE3のサイトがおかしなことに。ページ上に収まっているはずのプルダウンメニューが展開されて表示が崩れていました。
EC-CUBE3の管理ページに入るも、こちらもメインメニューの表示が崩れていました。
EC-CUBEとPHPのバージョン要件
EC-CUBE開発ドキュメントを調べてみると、EC-CUBE各バージョンのPHP要件は以下の通りで、現在使用しているEC-CUBE3.0.13でサポートされるのは、PHP7.1までということになります。
1 2 3 4 5 |
[EC-CUBE] [PHP] -------------------- 3.0.x 〜7.1 4.0/4.1 7.3〜7.4 4.2 7.4〜8.1 |
PHP7.4での動作をサポートする4系へのアップグレードは、それはもうほぼ別のシステムと言う変更規模であり、データベース構造すら異なるようで非現実的。
そしてレンタルサーバのPHP設定は、巻き戻し不能でダウングレード不能なことが通例です。
Twigを修正して対策
一見詰んだかに見えましたが、EC-CUBE3のGitHubページのコメントの中に、その解決策はありました。
それはTwigファイルの1つ、 /vendor/twig/twig/lib/Twig/Lexer.php の 171 行目を、
169 170 171 172 173 |
// push the template text first $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); if (isset($this->positions[2][$this->position][0])) { $text = rtrim($text); } |
次のように修正するというものでした。
169 170 171 172 173 |
// push the template text first $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); if (isset($this->positions[2][$this->position][0]) && ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0])) { $text = rtrim($text); } |
これならレンタルサーバでも触ることができるので、早速修正しました。
Twigキャッシュを削除して反映
Twigを修正してもキャッシュを削除しない限り、その内容は反映されません。
EC-CUBE3管理ページの壊れているメインメニューを、 コンテンツ管理→キャッシュ管理 と辿って、 twig にチェックを入れて キャッシュ削除 を実行します。
Twigキャッシュの削除後、即そのページのメインメニューも元に戻りました。
もちろん、EC-CUBE3サイト側も元に戻っています。