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


[初回公開] 2021年10月13日

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

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

1.EC-CUBE とは

EC-CUBE とは、株式会社イーシーキューブが開発しているプログラム言語「PHP」で動作する EC サイトのプログラムである。
オープンソースであるため、利用規約に沿えば無償で利用することができる。



EC-CUBE はサーバにインストールすることでパソコンやスマートフォンのブラウザから利用者は商品を購入し、EC サイトの運営者は商品を登録したり、発送待ちや過去の受注内容の管理を行うことが可能なため小規模店舗でも活用されている。

また、配送業者と支払い先の登録など店舗運営する上で必要な機能が一通り揃っているため、プログラムができない担当者でも EC サイトを簡単に開設することが特徴で、自身でカスタマイズしたり、有料のオプションを購入することでクレジット決済への対応や、納品書も EC-CUBE 上から直接印刷させるなど業務効率化にも利用できるツールである。

2.PHP で「Namespace declaration ・・・」が出る様子

PHP で「Namespace declaration statement has to be the very first statement ・・・」が出る様子としては、PHP プログラムを実行すると下記のように直訳すると「名前空間宣言ステートメントは、最初のステートメント、または宣言呼び出しの後にある必要がある。」の旨が表示される。

[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

EC-CUBE(バージョン 4 系)をカスタマイズするために簡単なサンプルコードを用意して動作確認する中で発生したもので、実行と同時に動作及び画面表示されなくなる。
EC-CUBE は PHP のエラー内容はブラウザに表示されないようになっているため、ウェブサーバのログで上記の内容を確認することができる。

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

PHP で「Namespace declaration statement has to be the very first statement ・・・」が出る原因としては、PHP のスクリプトであることを示す行が 1 行目に無い、もしくは改行こーどしかないことが原因である。

例えば PHP のコードが次のような場合である。

 ← 空の行
<?php

namespace ****


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

PHP で「Namespace declaration statement has to be the very first statement ・・・」が出た場合の対応方法としては、1 行目に実行してようとしているファイルが下記のように PHP スクリプトであることを宣言することで解決する。

<?php ← 1 行目に必ず記載

namespace ****

また、1 行目の <?php の前にはコメントも記載してはならず、コメントを記載する場合は <?php の後の行でなければならない。

尚、EC-CUBE をカスタマイズする際に既にあるファイルをコピーして利用する場合は 1 行目に <?php があるので問題ないが、空のファイルからカスタマイズしたり、コメントを残す場合は注意が必要である。

関連記事

コメントを残す