ホームページ > php教程 > php手册 > PHP で PHP ファイルに構文エラーがあるかどうかを確認する方法

PHP で PHP ファイルに構文エラーがあるかどうかを確認する方法

WBOY
リリース: 2016-06-13 12:19:31
オリジナル
1252 人が閲覧しました

以前、Dangdang のプロジェクトでシンプルなテンプレート エンジンを使用しましたが、これも discuz をベースにしたテンプレート エンジンで、その内容は非常にシンプルです。先ほども述べたように、これは非常に単純なので、コンパイル時にテンプレートの構文もチェックする必要があります。その後、開発プロセス中に、コンパイルされた PHP ファイルに構文の問題が発生する可能性があります。変更して再コンパイルするだけです。まず第一に、PHP テンプレートをリクエストするたびに再コンパイルすることはできません。これはパフォーマンスに重大な影響を及ぼします。そのため、コンパイルされた各 PHP ファイルの最後にテンプレート ファイルが変更されているかどうかを確認し、それに従ってテンプレート ファイルを更新します。必要に応じて、テンプレート ファイルを再コンパイルします。 現在の問題は、コンパイルされた PHP ファイル自体に構文エラーがあり、テンプレート チェック手順がまったく実行できないため、テンプレート ファイルの問題を修正しても、再コンパイルされません。 そこで、生成されたphpファイルが合法かどうかを確認する簡単な方法を探しています。不正な場合は再コンパイルすると、開発プロセス中にエラーが発生したときにキャッシュ ファイルを手動で削除する必要がなくなります。

ネットで調べました。最初は token_get_all() 関数が構文エラーを処理できるのではないかと考えましたが、単純な字句解析しか行わないことがわかりました。方法はありません。その後、フォーラムに行ってそれについて質問しました

http://groups.google.com/group/professional-php/browse_thread/thread/b8581f6b07b10ff0/2601a63c406bb1c1?lnk=gst&q=reeze#2601a63c406bb1c1

php_check_syntax() という関数があると誰かが教えてくれました http://www.php.net/manual/en/function.php-check-syntax.php 問題はそれだけで決まっていると思います。 。ぜひRTF(Read The Fun Manual)を読んでみてください。この関数は廃止されました:
注: 技術的な理由により、この関数は廃止され、PHP から削除されました。代わりに、コマンドラインから php -l somefile.php を使用してください。

この技術的な理由は次のとおりです。 ? 今は心配しないでください。後でゆっくり勉強します。とにかく、この方法は使用できません。
彼らの提案は、コマンドライン $php -l filename.php を使用して構文をチェックすることです。
Gary Every が参考用にコード スニペットを提供してくれました:

コマンド ラインで確認するのは大きな問題ではありません。オンラインアプリケーションに入れたい場合はどうすればよいですか? これには移植性の問題が伴います。最初にオペレーティング システムが来て、次に環境変数が来ます。これはサーバー側の構成によって異なります。誰かが独自の php_check_syntax() 関数の実装を http://www.php.net/manual/en/function.php-check-syntax.php に投稿しました。
上記のコマンドライン方法を使用するものもあります。
検証に eval メソッドを使用することについては後述します。 eval メソッドは、受信したコードを実行します。コードに構文エラーがある場合は、「@」エラー抑制機能を使用してエラー メッセージを削除できます。eval は関数ではないため、削除できません。変数関数メソッドを使用して呼び出す例:
$func = 'eval'
$func() のような呼び出しは無効です。そのような関数を自分で定義すると、問題が発生する可能性があります。 eval がキーワードだからです。
eval 呼び出しは include と似ています。インクルードされたファイルに明示的な戻りがない場合は、null が返されます。チェックする必要があるファイルを直接評価すると、チェックされたファイル内のコードが実行されます。これは、ファイルの構文が正しいかどうかをチェックするだけで済みます。 チェックするファイルの前に return ステートメントを追加して、コードを事前に飛び出して、後続のコードが実行されないようにすることができます。はい、それだけです。コードは次のとおりです。
checker.php

コードをコピー コードは次のとおりです。



if(!function_exists('php_check_syntax')) {
function php_check_syntax($file_name, &$error_message = null) {
$file_content = file_get_contents($file_name); 🎜>$check_code = " return true; ?>";
$file_content = $file_content . "
if(!@eval($file_content)) {
$error_message = "ファイル: " .realpath($file_name) 。" 構文エラーがあります。

を返します。
}

if(!php_check_syntax("file.php", $msg)) {
echo $msg;
}
else {
echo "わーい!"; 🎜>}


file.php



コードをコピー


コードは次のとおりです:

foreach: : a => b ?>


Parseエラーはset_error_handler処理関数ではハンドリングできないため。この例外はキャッチできません。そのため、エラーを抑制するために @ が使用されます。この場合の問題は、詳細なエラー情報を取得できないことです。 ただし、現時点で必要な機能は、構文が正しいかどうかを確認することだけです。間違っている場合は、テンプレート ファイルを再コンパイルします。構文エラーについては、Web ページを表示するときに自然に表示されます。
最善の方法は、放棄された php_check_syntax メソッドを PHP に戻すことです。次回はなぜこの機能が削除されたのかを考察していきます。
////////私の思考は非常に混乱しており、文章のすべてが一貫しています。誰が私の中国語をそんなに悪くしているのでしょうか?
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート