【PHP】Parse error: syntax error, unexpectedとはどういうエラー?

PHPプログラミングで発生しやすいエラーの一つ「Parse error: syntax error, unexpected 」。

「Parse error: syntax error」は何が原因で発生するエラーなのか解説していきます。

目次から探す

「Parse error: syntax error, unexpected」とは

「Parse error: syntax error, unexpected 」とは、閉じカッコや行末のセミコロンなどが抜けているときに発生する構文エラーです。

Parse Errorは直訳すると解析エラー、つまりPHPを実行しようとしたけど構文が間違っているから実行できないという意味であり、このエラーが発生した行以降は実行されません。

<?php
//ダブルクォーテーションが一つ抜けている
echo "ss
?>

Parse error: syntax errorはunexpectedのあとにどういう構文エラーが発生しているのかが記述されており、

  • Parse error: syntax error, unexpected 関数名/変数名
  • Parse error: syntax error, unexpected end of file

などと表示されます。

Parse error: syntax errorが起きる原因

ありがちなのがif文やfor文の閉じカッコ忘れです。閉じカッコの数があわない場合、「Parse error: syntax error, unexpected end of file」が発生してしまいます。

<?php
$a = 100;
if($a > 0){
    echo 'Hello';

?>

例えばこちらのコードは3行目のif文の綴じカッコを忘れてしまっています。if文1個だけなど、ネストするブロックが少なければこういったミスが起きにくいですが、何重にもif文がネストして深い状態になってしまうと、カッコが何個あるのかわからなくなってしまって構文エラーを引き起こしやすいです。

また、HTMLと組み合わせてPHPを記述している場合も注意が必要です。

<?php
$a = 100;
?>

<?php if($a > 0){ ?>

<p>こんにちわ</p>

<?php 
//その他の処理
?>

間にHTMLを書いている間にif文の綴じカッコを書くのを忘れてしまうことがあります

複数ファイル組み合わせてPHPプログラムを組んでおり、閉じカッコは別ファイルで記述するような書き方だとエラーを生みやすいので気をつけてください。

セミコロン抜けでも発生する

PHPでは変数への代入・関数呼び出し、return文などのあとにはセミコロン「;」が必要です。

セミコロン抜けの場合、セミコロン抜けが発生している行の次の処理がある行がエラー行となります。例えば以下のプログラムは1行目ではなく2行目でエラーが発生します。

$a = 10
$b = 10;

PHPコンパイラから見ると、$a = 10 $b = 10; と解釈されるため、文法上おかしい状態になってしまうのです。

そのため「Parse error: syntax error, unexpected」が発生するようになっています。

エラー行に注意

「Parse error: syntax error, unexpected end of file」が発生する場合、エラーとして提示される行は必ずファイルの最終行になります。

例えば以下の12行のプログラムは5行目にif文を書いていますが、PHP Parse error: syntax error, unexpected end of file in /workspace/Main.php on line 12 すなわち12行目でエラーが発生していると表示されます。

<?php
$a = 100;
?>

<?php if($a > 0){ ?>

<p>こんにちわ</p>

<?php 
//その他の処理
?>
<p>ありがとう</p>

このようになってしまうのは、コンパイラから見るとファイルの終端までif文のブロック内という扱いであり、どこで閉じカッコが記述すべき行なのかわからないのです。

閉じカッコを忘れているif文・for文の開始行をエラー行として提示してくれたら嬉しいのですが、残念ながらそうはなってくれません。

エラー文に”unexpected end of file”というテキストが含まれていた場合、エラー行は当てにならないので閉じカッコ忘れなどをやってしまってはいないかプログラムを見直すようにしましょう。

目次から探す