ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで PHP ファイルに構文エラーがあるかどうかを確認する方法

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

WBOY
WBOYオリジナル
2016-07-21 15:41:52755ブラウズ

以前、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 function 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);
$file_content = $check_content ;

if(!@eval ($file_content)) {
$error_message = "ファイル: " .realpath($file_name) "
return false
}
}

if(!php_check_syntax(" file.php", $msg)) {
echo $msg;
}
else {
echo "うーん、OK!"


file.php



;コード

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


foreach:: a => b
?>
Parseエラーはset_error_handler処理関数ではハンドリングできないため。この例外はキャッチできません。そのため、エラーを抑制するために @ が使用されます。この場合の問題は、詳細なエラー情報を取得できないことです。 ただし、現時点で必要な機能は、構文が正しいかどうかを確認することだけです。間違っている場合は、テンプレート ファイルを再コンパイルします。構文エラーについては、Web ページを表示するときに自然に表示されます。
最善の方法は、放棄された php_check_syntax メソッドを php に戻すことです。次回はなぜこの機能が削除されたのかを考察していきます。
////////私の思考は非常に混乱しており、文章のすべてが一貫しています。誰が私の中国語をそんなに悪くしているのですか?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321087.html技術記事以前、Dangdang のプロジェクトでシンプルなテンプレート エンジンを使用しました。実際には、discuz をベースにしたテンプレート エンジンです。それは、いくつかのカスタマイズを行うだけです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:2 つのタイムスタンプ間の時間 (時間) を計算する PHP 関数_PHP チュートリアル次の記事:2 つのタイムスタンプ間の時間 (時間) を計算する PHP 関数_PHP チュートリアル

関連記事

続きを見る