「Parse error: syntax error」とは?

Parse error: syntax error…」というエラーメッセージはWordPressでテンプレートの修正中にもよく見るエラーメッセージです。コードに文法エラーがあるときに表示されますが、ほとんどの原因は入力ミスです。エラーメッセージの解釈や行番号に惑わされると解決が遅れるので注意してください。また、単純な入力ミスではない「怖いParse error」の場合もあります。

「Parse error: syntax error…」が起きたときに見るべきポイント

「Parse error: syntax error…」が発生したときのチェックポイントを紹介します。次の例では「"こんにちは"」とすべきコードの右側の「"」がないので文法エラーになります。

<?php
echo "こんにちは;
?>

次のようなエラーメッセージが表示されます。

Parse error: syntax error, unexpected end of file, expecting variable (T_VARIABLE) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN) in C:\xampp\htdocs\test\a.php on line 3

エラーが起きると焦ってネット検索しまくるかもしれませんが、エラーメッセージ全体を真面目に解釈しようとするのは効率的ではありません。「Parse error」が起きたときに見るべきポイントは次の3つです。

Parse errorのチェックポイント
Parse errorのチェックポイント
Parse errorのチェックポイント
  1. Parse error: syntax error --- 文法エラーです。入力ミスをチェックしてください。
  2. 問題のあるファイル名 --- 示されたファイルを開いてチェックしてください。
  3. 問題のある行番号 --- この行番号付近のコードに間違いがあります。

その他のゴチャゴチャしたメッセージの解読にはPHPの基礎知識が必要になるので、あまり気にしないで大丈夫です。

とにかく、通常は表示されたファイルを開いて、行番号あたりを見て入力ミスがないかチェックするのが解決の近道です。

コピーペーストのミスでParse error

広い意味では入力ミスでしょうがコピーペーストのミスによるParse errorも多いです。WordPressカスタマイズではネット検索したコードを単純にコピペすることも少なくありませんが油断は禁物です。特にPHPの閉じタグ「?>」のコピペ忘れに注意してください。

<?php
…略…
?>

また、「if」で始まるコードは「endif」や「}」で終わります。

<?php if( ) : ?>
…略…
<?php else : ?>
…略…
<?php endif; ?>

これらのifのブロックは長いコードになることがあるので、漏れなく最後までコピーペーストするようにしましょう。

if ( ) {
…略…
} else {
…略…
}

初歩的すぎるかもしれませんが、実際に相談の多いトラブルです。コピーしたり移動したりするコードが数十行におよぶとミスが起きがちなので注意してください。

「Parse error: syntax error…」の行番号は信じてはいけない

「Parse error: syntax error…」でチェックする行番号は必ずしもエラーが発生した行の位置を示しているとは限りません

たとえば、次の例では7行目のif文の閉じ忘れが原因でParse errorになります。

<?php
$a = "テスト";
$b = "テスト";

if ($a == "テスト") {
    echo "テストです";
 

if ($b == "テスト") {
    echo "これもテスト";
} else {
    echo "テストではない";
}
?>

エラーメッセージでは次のように14行目にエラーがあると表示されますが、実際に修正が必要なのは7行目です。14行目ばかり見ていても解決できません。

「Parse error: syntax error, unexpected $end in C:\file……test.php on line 14

行番号は参考にとどめ、その周辺にミスがないかチェックしましょう。

サイト改ざんが原因でParse errorになることも

ほとんどのParse errorは単純な入力ミスやコピペミスですが、中には怖いParse errorもあります。それはサイトが改ざんされたケースです。

サイトへの不正ログインなどによってサイト内のファイルが改ざんされることがあります。その改ざんのほとんどは手動ではなくロボットが自動で行っているため、失敗することもあります。

ファイルの改ざんに失敗すると文法的におかしなコードが埋め込まれることになるので、結果として文法エラー(Parse error)になります。

入力ミスと違う点は、修正した覚えのないファイルでエラーが発生していることです。たとえば、ある日突然、wp-adminフォルダやwp-includesフォルダにあるファイルやwp-login.phpなどのようにカスタマイズするはずのないファイルでParse errorが発生したら、サイト改ざんを疑ってみてください。

修正していない ファイルでParse error、それは改ざんかも?
修正していない ファイルでParse error、それは改ざんかも?

この場合、単純にParse errorを取り除けば良いとは限らないので対処は簡単ではないかもしれません。場合によっては、WordPressのシステムファイルやテーマ、プラグインなどを入れ替えて、改ざんの可能性のあるファイルを「洗浄」する必要があります。

また、データベースにも不正なプログラムを埋め込まれている可能性があるので、チェックして問題のあるコードを削除する必要があります。

サイト改ざんの失敗でParse errorが発生するのは、ある意味で運が良いとも言えます。改ざんに成功してしまえばエラーが発生せず、サイトに地雷が埋まった状態に気づかないからです。その方が危険なことは言うまでもありません。

WordPressやPHPのバージョンアップでParse errorになることも

WordPressやPHPをバージョンアップしたタイミングでParse errorになることもあります。これは、使用中のプラグインについて以前のバージョンではセーフだったコードの書き方が、新たなバージョンではエラーになるように仕様が変更された場合などです。

対処法としてはエラーメッセージを参考に問題のあるプラグインを特定し、手動でアップデートする方法があります。

この場合、個別のファイルを開いて行番号あたりのミスを修正しなくても、古いプラグインをアップデートすれば解決するはずです。

まとめ

以上、Parse errorが発生するケースについて説明してきました。このサイトでは他のエラーメッセージの対処法として同じことを何度か書いていますが、エラーメッセージの行番号は参考にとどめ、その周辺に入力ミスがないかチェックしましょう。

基本的には単純な入力ミスかコピペミスです。

ただし、サイトが改ざんされていたり、PHPのバージョンアップが原因の場合、復旧に時間がかかることもありますが落ち着いて対処しましょう。よくわからなければWordPressメールサポートにご相談ください。

WordPressトラブル