12

自動ロードを使用してPHPクラスファイルを動的にロードします。そして、それらのファイルは、何らかの理由で欠落または破損している可能性があります。

Autoloadは欠落しているファイルを正常に報告するため、アプリケーションロジックはそれを処理できます。ただし、これらのファイルが破損している場合は、処理全体が停止し、ユーザーの画面が空白になり、エラーログに「PHP解析エラー:構文エラー」が表示されます。

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

4 に答える 4

4

実行時に正しくないPHPファイルをチェックしようとしないでください。アプリケーションの応答時間が長くなります。

「より良い方法」は、PHPスクリプトの変更が完了したら、コマンドラインからphp-lを使用することです。または、使用している場合はビルドプロセスに含めます。または、SVNを使用していて、 SVNフックを定義できる場合は、SVNpre-commitフックとしてプラグインします。

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


避けたいエラーのようなエラーはおそらく頻繁には発生しないことを考えると、おそらく発生させる方がよいでしょう。
ONly事は:ログをアクティブにし、それらを監視し、テレが問題であるときに迅速に検出できるようにすることです:-)


もちろん、これはファイルが見つからない場合の対処を妨げるものではありません。しかし、それは別の問題です...

于 2009-07-30T18:01:28.377 に答える
4

ルート ディレクトリに checkSyntax.php という 1 つの 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'

ソースディレクトリに移動し、svn st を実行します。

ファイルのリストが表示されるので、コマンドを簡単に実行できます。

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

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

楽しい :)

于 2012-04-26T07:06:54.767 に答える
0

要するに:私はこれを行う方法を見ることができませんが、十分かもしれない考えを持っています。

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

この方法では、最初は空白の画面を表示しますが(本番サーバーでは出力へのassumigエラー報告がオンになります)、2番目の画面には障害のあるコンポーネントのないページが表示されます。

オートローダーでは、必須クラスのロードを常に試行するためのリストまたは命名スキームが必要です(アプリケーションが一貫性のない状態になる可能性がある他の方法)

于 2009-07-30T17:57:24.250 に答える
0

また、動的に実行している PHP をロードし、exec("php -l $fileName") が有効であることをアサートする単体テストを実行することもできます。そうすれば、テストで一度検証し、適切な変数を使用して生成し、PHP が適切であるという妥当なレベルの自信を持つことができます。

于 2014-02-10T22:35:11.280 に答える