文字列の閉じクォート忘れによる Parse error
文字列を囲むクォートの片方を書き忘れると、それ以降のコードすべてが文字列の中身として読み込まれ、ファイルの終わりまで閉じクォートが見つからずエラーになります。
エラーメッセージの読み方
Parse error: syntax error, unexpected end of file in main.php on line 3
main.php- ファイル名
3- 行番号 — PHPが構文解析を諦めた位置
Parse error- エラー種別 — 実行前の構文チェックで検出されました
syntax error, unexpected end of file- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 <?php 2 $s = "hello ^ 3 echo $s;
Parse error: syntax error, unexpected end of file in main.php on line 3
文字列を閉じるダブルクォートがありません。以降のコード全体が文字列の中身として読み込まれ、ファイルの終わりまで閉じクォートが見つからずエラーになります。
直し方: (空) を "; にします。
広告
広告スロット(未設定)
パターン2
1 <?php 2 $msg = "world ^ 3 echo $msg;
Parse error: syntax error, unexpected end of file in main.php on line 3
msgも同様です。閉じクォートが無いと、echo以降の行もすべて文字列の一部として飲み込まれます。
直し方: (空) を "; にします。
パターン3
1 <?php 2 $name = "Al ^ 3 echo $name;
Parse error: syntax error, unexpected end of file in main.php on line 3
エラーはファイル末尾を指しますが、直す場所は文字列が開始した行です。
直し方: (空) を "; にします。
パターン4
1 <?php 2 $msg = "bye ^ 3 echo $msg;
Parse error: syntax error, unexpected end of file in main.php on line 3
文字列を閉じるダブルクォートがないため、ファイル末尾まで文字列として読み込まれエラーになります。
直し方: (空) を "; にします。
パターン5
1 <?php 2 $label = "ok ^ 3 echo $label;
Parse error: syntax error, unexpected end of file in main.php on line 3
labelも同様です。閉じクォートが無いと以降の行もすべて文字列の一部として飲み込まれます。
直し方: (空) を "; にします。
よくある誤解
エラーがファイル末尾の行を指すからといって、そこにクォートを足しても直りません。本当に直すべきは、文字列が始まった行の閉じクォートです。
実務での勘所
長い文字列や、大量のHTMLをそのまま変数に埋め込みたい場合、PHPにはヒアドキュメント(<<<EOT ... EOT;)という書き方があります。この構文は開始と終了を示す独自のラベルで囲むため、途中にシングルクォートやダブルクォートが大量に含まれていても、クォートの閉じ忘れを心配せずに済みます。長大な文字列を扱う場面では、通常のクォートよりヒアドキュメントのほうが安全な選択肢になります。