質問

自動ロードで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

思考?

役に立ちましたか?

解決

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

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

私の意見では、実行時に自分自身で確認するよりも、ほとんどすべての解決策の方が優れているでしょう!


回避したいエラーのようなものを考慮することは、おそらく頻繁に起こることはないでしょう、たぶん...それらを起こさせた方がよいでしょう。
唯一のことは、ログを有効にして監視し、問題が発生したときに迅速に検出できるようにすることです:-)


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

他のヒント

別の方法で、ルートディレクトリに1つのphpファイルを作成できます。     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'

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

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

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

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

お楽しみください:)

簡単に言うと、これを行う方法はわかりませんが、十分なアイデアがあります。

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

この方法を使用すると、最初は空白の画面が表示されます(実稼働サーバーでは出力へのエラー報告が有効になります)が、2番目の画面には障害のあるコンポーネントがありません。

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

また、動的に実行しているPHPをロードし、exec(&quot; php -l $ fileName&quot;)が有効であることをアサートするユニットテストを実行することもできます。そうすれば、テストで一度検証し、適切な変数を使用して生成し、PHPが適切であるという合理的なレベルの信頼を得ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top