1

さて、私はしばらくの間オートローダーを使用していて、MVCにかなり慣れてきて、名前空間に取り組むことにしました。まあ、これは期待どおりに機能していません。私は非常に簡単な方法でエラーを再現することができたので、私のphpファイルの内容は次のようになりました。

<?php
namespace site\test;

echo 'hello';

出力は私が期待したものではありません:

致命的なエラー:名前空間宣言ステートメントは、 2行目のファイル内のスクリプトの最初のステートメントである必要があります

Synology NASで最新バージョンのDSM(SynologyのOS)を使用してPHP5.3.10を実行しています。これはApachev2.2.22を利用します。「namespace」行をコメントアウトすると、「hello」という単語が返され、その前に余分な文字がないことが確認できます。

ファイルの先頭にBOMはありません。また、これが問題であることを示唆する「場所」などのヘッダーの設定にも問題はありません。

行末はUnix(\ nのみ)で、ファイルの文字エンコードはUTF8です。

PHP設定「auto_prepend_file」は空です。

4

3 に答える 3

2

名前空間の前に空白はありますか?名前空間は、出力の前に発生する必要があります。これには、ブラウザへのHTMLが含まれます。これには、特定のエディターから侵入する可能性のあるUTF-8バイトオーダーマーク(BOM)も含まれます。

Linuxなどのエディターでファイルを開いてみるviと、最初にBOMがあるかどうかが表示されます。

ファイルで出力を開始する他の方法については、PHPで「ヘッダーがすでに送信されています」エラーを修正する方法を確認してください。

于 2013-02-13T21:22:35.287 に答える
1

これは、最初の文字としてUTF-8 BOMを含むファイルがあり、開始タグの前のすべての空白を削除する必要がある場合に発生します。

于 2013-02-13T21:23:19.480 に答える
0

DSM(Synology OS)を再インストールすると、実際に問題が解決しました。完了すると、他のフレームワークから取得したクラスの一部には、ファイルの先頭に「BOM」バイトがありますが、すべてではありません。BOMの問題に対する簡単な解決策は、オートローダーに「BOM」リムーバーを追加することです。

于 2013-02-16T22:50:25.103 に答える