ECCUBE3、サーバーのPHP7.4で崩れた管理画面メニューや検索ツールを修正するメモ

EC-CUBE管理画面目メニューの崩れ EC-CUBE

目的:EC-CUBE3をPHP7.4でも利用できるように調整する。

2021年11月30日、さくらインターネットはPHP7.3を廃止し強制的に全てをPHP7.4に切り替えてしまいました。

ECCUBE3が安定して利用できるPHPは7.3迄です。早急な解決策が必要になってしまいました。

結果、解決することができた方法をご紹介。

ECCUBE3をPHP7.4に切り替えることで起こるトラブル

サーバー側でPHP7.4にすると2つのエラーが出てしまいました。

①管理画面メニューの崩れ

②TOPメニューで使用していた検索プラグイン(セレクトボックスリストとレイアウトの崩れ)

 

サーバ管理で、PHPのバージョンを選択する場所はあるのですが、利用者が多いPHP5.●のバージョンは残されましたが、PHP7.3ユーザーは利用者が少ないという判断で、完全に削除されてしまいました。

この状態では、通販の機能はあっても、レイアウトはひどい状態のままです。

3つの解決方法

EC-CUBE3の推奨PHPは、5.3.9~7.1.xです。さくらインターネットでは,7.1.xのバージョンは完全に削除されました。

5.3.9以降にするという方法もありますが、複数のドメインで他のシステムを使用していたので、ドメインごとにPHPを設定することのできるサーバーに移設するのが最も確実です。

解決策1,PHP7.3でも安心して運用可能はサーバーへの移設

※さくらインターネットでは、個別のドメインごとにPHPを設定することはできません。個別に設定できるエックスサーバー等での運用が望ましいと思います。

しかし、移動は簡単ではありません。ハードルの高い解決策です。

解決策2、サーバー内のドメイン単位でPHPバージョンを設定する方法

レンタルサーバー内の複数のドメインに対して、さくらインターネットはたった1つのPHPバージョンだけを指定する設定になっています。管理画面の設定は使わずに、ドメイン直下のファイルの中に.htaccessとphp.cgi(名称は変更可能)を設定してドメイン単位でPHPバージョンを指定させることが可能です。

ただし、さくらサーバーでは、PHP7のバージョンは,PHP7.4のみなので、PHP7.3を指定したくてもできません。

指定するとすればPHP5.6又は5.4で行うしかありません。

指定方法の詳細は以下をご覧ください。

さくらインターネット 1つしか指定できないPHPバージョンを、ドメイン単位で個別に設定する方法
さくらインターネットで1つしか指定できないPHPのバージョンをドメイン(URL)ごとに異なるPHPバージョンを設定する方法を紹介します。

こちらもPHP5.6等を指定してうまくいったとしても、古いバージョンなのでその後の障害が不安になります。

解決策3、Twig内Lexer.phpファイルのコード修正

ネット上に答えを求めて探しに探してこちらの方法を見つけることができた。

以下にあるファイルに書かれた、コードを修正する方法です。

/www/vendor/twig/twig/lib/Twig/Lexer.php

FTPで上記のファイルを開き

わたしの場合174行目あたりにある

if (isset($this->positions[2][$this->position][0])) {
            $text = rtrim($text);
        }

 

を削除して、代わりに

 

if (isset($this->positions[2][$this->position][0]) && ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0])) {
        $text = rtrim($text);
        }

 

に書き換えるという処置です。

 

/*if (isset($this->positions[2][$this->position][0])) {
            $text = rtrim($text);
        }*/

 ↓

if (isset($this->positions[2][$this->position][0]) && ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0])) {
        $text = rtrim($text);
        }

 

以前までのコードは削除せずに//または/* */で無効化して新しいコードを埋め込みましょう。

間違って他のコードを入替たりして別なトラブルがあっても、復旧できるように以前のものは消さないで置いておきましょう。

Lexer.php ファイルそのものもバックアップをとっておきましょう。今後バージョンアップがあってファイルを入れ替えになった場合はこのコード自体元に戻ってしまう可能性があるので、変更した記録はどこかに分かるようにして管理しましょう。

結局この方法で解決しました。

ECCUBE3を2つ運用、バージョン3.0.18と3.0.17でしたがどちらにも有効でした。

結果は以下の通り、管理画面もTOPページのレイアウト崩れも解消されました。

①管理画面

管理画面メニュー元の形

②TOPページ

TOPページ元の形

 

まとめ

対処方法3つ、

・PHP7.3が有効なサーバーに移転する

・ドメイン個別にPHP5.6を割り当てる

・Twig内ファイルLexer.phpの一部を書き換える

の対処法のうち一番楽な「Twig内ファイルLexer.phpの一部を書き換える」方法で解決に至りました。

ただし、PHP7.4も2022年11月にはサポート終了となりさくらインターネットはPHP7.4も削除してしまうでしょう。

その前に、一番大変なサーバー移転が必要だと考えています。

不安のすくなそうなエックスサーバーへの移転を考えてます。