EC-CUBE4 突然の死!! 本番モードでdump関数を使うと死ぬ

最初に結論

本番モードの状態でTwig内やPHP内でdump関数を使うと死にます。

以下のような画面になる。500エラーになる。とても悲しい。

EC-CUBE4 システムエラーが発生しました。

本番モードとは?

.env もしくは .htaccess 内で開発デバックモードか本番モードを設定してあります。

.env(本番モード)
APP_ENV=prod
APP_DEBUG=0
.env(開発デバックモード)
APP_ENV=dev
APP_DEBUG=1

開発デバックモードにすると、dump関数を使って変数の中身が見られるなどの恩恵を受けられます。PHP標準で言うvar_dump関数のめちゃくちゃリッチ版。

例えば、dump($Product)でEccube\Entity\Productの中身が確認できる。見やすくてありがてぇ…。

でも、実際に稼働している本番サイトで開発デバックモードにしていると重いし見せたくないものが見えちゃうしで良くない。だから、ECサイトとしてオープンしたら必ず本番モードに切り替えよう。

dump関数はソースコード内に残さないように

dump関数はとても便利。開発デバックモードにしていると変数の中身が確認できる、ありがてぇ…。

でも、ソースコード内にdump関数を残しているととても危険。本番モードだとシステムエラーになってしまうんだ。だからdump関数は確認が終わったら必ず消そう。

何度も言うけどこうなる。

もっと細かく言うと、設定方法でTwigとPHPで若干異なる。以下の表の通り。

APP_ENVAPP_DEBUGTwigPHP
prod0ERROROK
prod1ERRORERROR
dev0OKOK
dev1OKOK

本番環境なら prod 0 だし、開発デバックモードなら dev 1 にすると思う。結局の所、TwigでもPHPでもソースコード内にdump関数は残してはいけない。

ローカル開発環境では開発デバックモードにしていてdump関数あっても普通に動いているから、dump関数の消し忘れに気づけ無いときがあるかもしれない。本番にアップロードしてシステムエラーになってびっくりしないように、しっかり消しておこう。大体はGit差分で気づくでしょうけど。

さいごに

なんでこの記事書いたの?

僕がそうなったから。

おわり。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA