PHP で Namespace declaration statement 関連のエラーが出た場合の対応方法

EC-CUBE をカスタマイズしていると「Namespace declaration statement has to be the very first statement ・・・」のエラーが発生し、EC-CUBE に限らず PHP でプログラムしていると発生しうる事象のため、原因と対応方法について解説する。

PHP で Namespace declaration statement 関連のエラーが出た場合の対応方法




1.PHP で「Namespace declaration ・・・」が出た状況


EC-CUBE(バージョン 4 系)をカスタマイズするために簡単なサンプルコードを用意して動作確認する中で Web サーバのログに下記の内容が出力され、動作しなくなった。

[Tue Feb 09 10:25:20.711598 2021] [php7:error] [pid 6529] [client 10.***.***.***:54798] PHP Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in /var/www/html/cube4_3/app/Customize/Controller/SearchlogController.php on line 3




2.PHP で「Namespace declaration ・・・」が出る原因


「Namespace declaration ・・・」が出る原因を調査するため出力されたログの内容を翻訳すると、名前空間の宣言は、最初のステートメントであるか、Controller.php の 3 行目の スクリプトで宣言呼び出しの後に書く必要があることがわかる。

ログの内容からはわかりづらいが、PHP のスクリプトであることを示す行が 1 行目に無いことが原因である。

3.PHP で「Namespace declaration ・・・」が出た場合の対応方法


PHP で「Namespace declaration ・・・」が出た場合の対応方法としては、下記のように 1 行目に空の行があることが多い。

 ← 空の行
<?php

namespace ****


この 1 行目にある行を削除し、1 行目には PHP であることを示す <?php を必ず記述するようにすると「Namespace declaration statement has to be the very first statement ・・・」のエラーが発生する頻度が減る。

尚、EC-CUBE をカスタマイズせずに初期状態のまま運用する場合はこの事象は発生しないので安心して利用できる。

関連記事