以前、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
コードをコピーします
コードは次のとおりです: