EC-CUBEで新規ブロックを作ろうと思い、DBやPHPを修正して、いざ確認!と思ったら、画面は真っ白で、管理ページも「HTTP ERROR 500」で全く見えなくなって焦った話。
確認したこと
- 追記したDBの値や、PHPの行を削除した。 → ダメだった。
- EC-CUBEログの確認。ログは /app/log/site*****.log にある。 → 何も出てない。
- 【EC-CUBE3】エラーメッセージとその原因についてを参考に、/html/index.php 29行目の display_errors を On に変更。
ini_set('display_errors', 'On');
エラーが出るようになった!
display_errors を On にして、サイトにアクセスすると、真っ白だった画面にエラーメッセージが出た!
Fatal error: Namespace declaration statement has to be the very first statement in the script in /(ECCUBE DIR)/src/Eccube/ControllerProvider/FrontControllerProvider.php on line 25
原因判明
これは、こちらのページに書かれている通りでした。
原因は BOM でした。
utf-8 には BOM と呼ばれる unicode であることを示す(かつエンディアンを表す)値が付くことがあります。
これ、通常のエディタでは表示されないので付いているのかどうか見た目にわかりません。
また、phpはこれを無視してくれないため<?php の前にデータがあると見なされ、エラーとなったようです。
notepadでちょちょっと修正したのがまずかったようです。
ブロック追加のため触ったPHPと、エラー出力のために触ったhtml/index.phpをサクラエディタでBOMなし保存することで、無事解決しました。