「Parse error: syntax error」とは?
「Parse error: syntax error…」というエラーメッセージはWordPressでテンプレートの修正中にもよく見るエラーメッセージです。コードに文法エラーがあるときに表示されますが、ほとんどの原因は入力ミスです。エラーメッセージの解釈や行番号に惑わされると解決が遅れるので注意してください。また、単純な入力ミスではない「怖いParse error」の場合もあります。
この記事の内容
「Parse error: syntax error…」が起きたときに見るべきポイント
「Parse error: syntax error…」が発生したときのチェックポイントを紹介します。次の例では「"こんにちは"」とすべきコードの右側の「"」がないので文法エラーになります。
<?php echo "こんにちは; ?>
次のようなエラーメッセージが表示されます。
エラーが起きると焦ってネット検索しまくるかもしれませんが、エラーメッセージ全体を真面目に解釈しようとするのは効率的ではありません。「Parse error」が起きたときに見るべきポイントは次の3つです。
- Parse error: syntax error --- 文法エラーです。入力ミスをチェックしてください。
- 問題のあるファイル名 --- 示されたファイルを開いてチェックしてください。
- 問題のある行番号 --- この行番号付近のコードに間違いがあります。
その他のゴチャゴチャしたメッセージの解読には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になることも
ほとんどのParse errorは単純な入力ミスやコピペミスですが、中には怖いParse errorもあります。それはサイトが改ざんされたケースです。
サイトへの不正ログインなどによってサイト内のファイルが改ざんされることがあります。その改ざんのほとんどは手動ではなくロボットが自動で行っているため、失敗することもあります。
ファイルの改ざんに失敗すると文法的におかしなコードが埋め込まれることになるので、結果として文法エラー(Parse error)になります。
入力ミスと違う点は、修正した覚えのないファイルでエラーが発生していることです。たとえば、ある日突然、wp-adminフォルダやwp-includesフォルダにあるファイルやwp-login.phpなどのようにカスタマイズするはずのないファイルでParse errorが発生したら、サイト改ざんを疑ってみてください。
この場合、単純にParse errorを取り除けば良いとは限らないので対処は簡単ではないかもしれません。場合によっては、WordPressのシステムファイルやテーマ、プラグインなどを入れ替えて、改ざんの可能性のあるファイルを「洗浄」する必要があります。
また、データベースにも不正なプログラムを埋め込まれている可能性があるので、チェックして問題のあるコードを削除する必要があります。
WordPressやPHPのバージョンアップでParse errorになることも
WordPressやPHPをバージョンアップしたタイミングでParse errorになることもあります。これは、使用中のプラグインについて以前のバージョンではセーフだったコードの書き方が、新たなバージョンではエラーになるように仕様が変更された場合などです。
対処法としてはエラーメッセージを参考に問題のあるプラグインを特定し、手動でアップデートする方法があります。
この場合、個別のファイルを開いて行番号あたりのミスを修正しなくても、古いプラグインをアップデートすれば解決するはずです。
まとめ
以上、Parse errorが発生するケースについて説明してきました。このサイトでは他のエラーメッセージの対処法として同じことを何度か書いていますが、エラーメッセージの行番号は参考にとどめ、その周辺に入力ミスがないかチェックしましょう。
基本的には単純な入力ミスかコピペミスです。
ただし、サイトが改ざんされていたり、PHPのバージョンアップが原因の場合、復旧に時間がかかることもありますが落ち着いて対処しましょう。よくわからなければWordPressメールサポートにご相談ください。