2009-07-30 5 views
11

autoloadでPHPクラスファイルを動的に読み込みます。 これらのファイルは何らかの理由で紛失または破損している可能性があります。PHPからPHPの構文をチェックすることはできますか?

アプリケーションロジックがそれを処理できるように、Autoloadは不足しているファイルを正常にレポートします。しかし、これらのファイルが壊れていると、処理全体が空白画面で停止し、エラーログには "PHP Parse error:syntax error"というエラーメッセージが表示されます。

PHPコードの構文をPHPコードからチェックすることはできますか?

私はここで見てきました:http://us.php.net/manual/en/function.php-check-syntax.php - これは非推奨です。

そして

exec("php -l $file"); 

間違った方法(http://bugs.php.net/bug.php?id=46339

思考のようですか?

+4

スクリプトを実行するたびに含めるすべてのファイルの構文を確認することを検討しますか? – Gumbo

+0

正確ではありません。私は潜在的に破損しているかもしれない特別な種類のクラスを持っています。 –

答えて

6

あなたは常に必須クラスをロードしようとするリストや命名規則を持っている必要があり、オートローダで

は(他の方法は、あなたのアプリケーションは、一貫性のない状態である可能性があります)実行時のPHPファイル:アプリケーションの応答時間が短くなります!

"良い方法"は、PHPスクリプトの変更が完了したらコマンドラインからphp -lを使用することです。あなたがビルドプロセスを使用している場合は、それをビルドプロセスに含めることができます。あなたがSVNを使用していて、SVN hooksを定義できる場合は、SVNプリコミットフックとしてプラグインしてください。

私の意見では、ほとんどすべてのソリューションは、実行時に自分自身をチェックするよりも優れています。


避けたいもののようなエラーを考えると、たぶん頻繁に起こることはないでしょう。おそらくそれらを起こさせる方が良いでしょう。
唯一のものは、次のとおりです。ログを活性化し、それらを監視、テレはもちろん


:-)問題であるとき、これが不足しているファイルの場合に対処するのを防ぐことはできません迅速に検出することができます;しかし、それは別の問題だ...あなたはあなたのルートディレクトリに1つのPHPファイルを作ることができ

+0

あなたの答えをありがとう。 「合理的なパフォーマンスではなく、いいえ」という回答は有効なオプションです。 SVNプリコミットフックは素晴らしいアイデアだと私はほとんどの場合、私たちの問題を解決すると思う。 –

+0

あなたは大歓迎です:-) svn pre-commitフックについて:あなたがSVNサーバーの管理者である場合、フックは本当に使いやすいです! –

0

要するに、私はこれを行う方法は見当たりませんが、十分な考えがあります。

ログ監視プログラムがあります。または、解析エラーのあるファイルに対して標準ツールを使用してログをフィルタリングできます。ファイルが表示された場合は、悪意のあるファイル名をブラックリストに入れ、オートローダーはこのリストをロードする前にチェックします。

この方法では、初めて空白の画面を表示します(実稼働サーバーではエラー出力がオンになっていると仮定します)。ただし、2番目のページには障害のないコンポーネントが含まれています。あなたは本当に非正しいかどうかを確認しようとしないはず

+0

私は彼(彼のシステム)がビルド時にそれらのファイルを制御できないと仮定しました。 –

+0

興味深いアイデアですが、サイトを訪れるユーザーに依存して構文チェックを行うのは良くないと思います。最初の人だけが空白のページを取得する場合でも。 –

2

もう一つの方法は、 と呼ばれるにcheckSyntax.php

は 今
<?php 
for($i=1; $i < count($argv); $i++){ 
     $temp = "php -l " . $argv[$i]; 
     $output = exec($temp); 
     echo "\n$output"; 
} 
?> 

、このファイルを実行するためのショートカットを作るためにあなたのbashrcファイルを開きます。 以下の行を追加してcheckSyntaxを実行します。PHP

alias checkSyntaxErrors='php /root/checkSyntax.php' 

あなたのソースディレクトリに移動してください。

これはあなたのファイルのリストを示して、今すぐ簡単にコマンドを実行します。

checkSyntaxErrors file1.php file2.php ....... 

これは、引数として渡されるすべてのファイルをチェックします。

は:)

0

はまた、あなたは(「PHPは$ fileNameに-l」)が有効であるあなたは、動的に実行しているPHPをロードし、その幹部を主張いくつかのユニットテストを行うことができますお楽しみください。もしあなたがそれをしたら、あなたはテストで一度それを検証し、適切な変数を使ってそれを生成し、PHPがうまくいくという妥当なレベルの信頼を得ることができます。

関連する問題