PHP 構文エラー: 修正方法?
文法上の間違いは何ですか?
PHP は、C スタイルの命令型プログラミング言語です。厳密な構文規則があり、間違った位置にシンボルや識別子があった場合には回復できません。プログラミングの意図を推測することはできません。
重要なヒント
いつでも実行できる基本的な予防策がいくつかあります:
- 適切な コード インデント を使用するか、適切なコーディング スタイルを採用してください。 。読みやすさは例外の防止に役立ちます。
-
構文強調表示 を備えた PHP IDE または エディターを使用します。ブラケットとブラケットのバランスにも役立ちます。
- マニュアルの言語リファレンスと例を注意深くお読みください。 2 回読んで、ある程度のレベルを習得してください。
パーサー エラーの解釈方法
一般的な構文エラー メッセージは次のとおりです。
解析エラー: file.php 行 217 T_STRING で予期しない構文エラー、 ';'
が必要です。これには、構文エラーの可能性がある 個の 個所がリストされます。前述のファイル名と行番号を参照してください。
T_STRING のようなヘッダーは、パーサー/トークナイザーが最終的にどのシンボルの処理に失敗したかを説明します。ただし、これが必ずしも構文エラーの原因であるとは限りません。
の前にあるコード行 にも注目することが重要です。多くの場合、文法上の間違いは、以前に発生した単なる小さな間違いです。エラー行番号は、パーサーが最終的にすべてのエラーの処理を放棄する場所です。
文法エラーの修正
文法の問題を絞り込んで修正する方法はたくさんあります。
-
上記のソース ファイルを開きます。前述の コード行 を確認してください。
- 文字列の暴走や演算子の配置ミスについては、通常、そこに原因があることがわかります。
- 行を左から右に読んで、それぞれの記号が何をするかを想像してください。
-
より一般的には、 の前にある行 を確認する必要があります。
- 特に、前の行/ステートメントの末尾にセミコロンがありません。 (少なくともスタイルの観点からは)
- コード ブロック { } が適切に閉じられていないか、ネストされていない場合は、ソース コードをさらに掘り下げる必要がある場合があります。これを行うには、適切な コード インデント を使用します。
-
構文の色分け をチェックしてください!
- 文字列、変数、定数はすべて異なる色にする必要があります。
- 演算子 -*/ も別の色で表示する必要があります。そうしないと、間違ったコンテキストになる可能性があります。
- 文字列の陰影が長すぎるか短すぎる場合は、エスケープされていない、または閉じている " または ' 文字列マーカーが見つからないことを意味します。
- 次に同じ色の句読点が 2 つある場合そうでない場合、通常、お互いに問題が発生する可能性があります。または演算子の後に括弧を付けると、演算子が単独で
-
スペースに隣接することはほとんどの場合間違っています。任意の コーディング スタイルに従います。 >長い行を一時的に分割する
-
演算子、定数、文字列の間に自由に改行
を追加すると、非常に長いコードを調べる代わりに、パーサーが指定できます。解析エラーの行番号。欠落または誤って配置された構文記号を削除します。
- 複雑な if ステートメントを別の if 条件またはネストされた if 条件に分割します。 長い数式または論理チェーンの場合は、コードを簡素化します (可読性が向上します)。 = バグが少なくなります)
- の間に改行を追加します:
-
- 正しいコードであることを簡単に識別できます、不明な部分
- とパーサーが文句を言う行は
-
で分割されています。長いコード ブロック
は、構文エラーの原因を見つけるのに非常に役立ちます
問題のあるコードをコメントアウトします。
問題のあるコードのソースを特定できない場合。問題がある場合は、コードをコメントアウト (つまり、一時的に削除) してください。
- 解析エラーを解決すると、問題の原因がすぐに見つかります。
中括弧全体の不一致を一時的に削除したい場合があります。コードのインデント エラー)
として構文の問題を解決できない場合は、初心者が混乱する構文構造を避けるために、コメントアウトされたセクションを最初から書き直してみてください -
-
- 。
-
三項演算子: 生成を減らすことができますか?ただし、すべての場合に読みやすさが向上するわけではありません。熟練していない場合は、テンプレートによく使用される通常の if ステートメント (if:/elseif:/endif;) を使用するようにしてください。として{ code } ブロックは簡単に理解できます。>
" または '文字列の引用符が一致せず、エスケープされていない引用符
があります。特に string の演算子 -
は省略されています ( )。報告された行でそれらをカウントします。それらの量は等しいですか?
-
- 1 つの文法問題を解決すると、次の文法問題が明らかになる可能性があることを忘れないでください。
- 以下のコードで 1 つの問題が解決しても、他の問題が発生する場合は、ほぼ正しい方向に進んでいます。
- 編集後に同じ行に新しい構文エラーが表示された場合も、試みた変更が失敗する可能性があります。 (ただし、常にそうとは限りません)
-
修正できない場合は、以前に動作していたコードのバックアップを復元してください。
- ソースコードのバージョン管理システムを採用。破損したバージョンと最後に動作していたバージョンとの違いをいつでも確認できます。これにより、構文の問題が何であるかが説明される可能性があります。
-
目に見えない浮遊 Unicode 文字 : 場合によっては、ソース コード /ビューアに 16 進エディタまたは別のエディタを使用する必要があります。コードを見ただけでは発見できない問題もあります。
- 非 ASCII シンボルを見つける最初のステップとして grep --color -P -n "[x80-xFF]" file.php を試してください。
- 特に、BOM、ゼロ幅スペース、非改行スペース、およびスマート引用符がソース コードに侵入することがよくあります。 -
-
ファイルに保存されている 改行タイプ に注意してください。
- PHP は、n 改行文字のみをサポートし、r キャリッジ リターン文字はサポートしません。
- これは、MacOS ユーザーにのみ発生する場合があります (エディターの構成を誤るために使用される OS X 上でも)。
- 単一行の // または # コメントを使用する場合、通常は改行が無視された場合にのみ問題が発生します。改行が無視される場合、複数行の /.../ コメントがパーサーに干渉することはほとんどありません。
-
文法エラーがネットワーク経由で送信されない場合: マシンに構文エラーがあります。しかし、まったく同じファイルをオンラインに投稿することは二度と起こらないでしょう。これは、次の 2 つのうちの 1 つだけを意味します:
- 間違ったファイルを見ています。
- または、コードに目に見えない迷走 Unicode が含まれています (上記を参照)。簡単に見つけることができます。Web フォームのコードをテキスト エディターにコピーして戻すだけです。
-
PHP バージョンを確認してください。すべての構文構造がすべてのサーバーで利用できるわけではありません。
- コマンドラインインタープリタの php -v
- Web サーバー経由で呼び出される
これらは必ずしも同じではありません。特にフレームを使用する場合は、フレームを一致させる必要があります。
- PHP の予約キーワードを関数/メソッド、クラス、または定数の識別子として使用しないでください。
- 実験は最後の手段です。
他のすべてが失敗した場合は、いつでも Web でエラー メッセージを検索できます。構文シンボルは簡単に検索できません (Stack Overflow 自体は SymbolHound によってインデックス付けされています)。そのため、関連情報を見つけるには数ページかかる場合があります。
詳細資料
- David Sklar の「PHP デバッグの基礎」
- Jason McCreary の「PHP エラーの修正」
- Mario Lurig の「PHP エラー— 10 のよくある間違い」 》
- 《一般的なPHPエラーと解決策》
- WordPress ウェブサイトのトラブルシューティングと修正方法
- PHP エラー メッセージに関するデザイナーズ ガイド - スマッシング マガジン
ホワイト デッド スクリーン
Web サイトが空白の場合、通常のエラーは構文エラーです。
- error_reporting = E_ALL
- display_errors = 1
通常は php.ini で、または mod_php Via の場合は、を使用して表示を有効にします。 htaccess、および .user.ini 経由の FastCGI 設定にも対応します。
PHP は最初の行を解釈/実行することさえできないため、壊れたスクリプトで有効にするのは遅すぎます。簡単な修正方法は、test.php:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("./broken-script.php");
?>
ログイン後にコピー
のようなラッパー スクリプトを作成し、このラッパー スクリプトにアクセスして問題のあるコードを呼び出すことです。
スクリプトがクラッシュして HTTP 500 応答を受信したときに、PHP の error_log を有効にして Web サーバーの error.log を確認すると便利です。
以上がPHP 構文エラー: トラブルシューティングと解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。