2

現在、次のコードを使用して、アプリケーション フォームの一部としてアップロードされたファイルをスキャンしています。

$safe_path = escapeshellarg($dir . $file);
$command = '/usr/bin/clamscan --stdout ' . $safe_path;
$out = '';
$int = -1;
exec($command, $out, $int);

if ($int == 0) {
    // all good;
} else {
    // VIRUS!;
}

動作しますが、遅いです。誰もがa)になるような提案を受けました。物事をスピードアップし、b)。スクリプト全体を改善しますか (たとえば、exec() と system() などの利点について完全には明確ではありません)。

速度を改善できない場合は、「ファイルがスキャンされている間、しばらくお待ちください」という暫定的なメッセージを表示したいのですが、どうすればよいかわかりません。

編集:申し訳ありませんが、問題のアプリケーションは有効な(つまり、ウイルスのない)ファイルなしでは受け入れられないため、その時点でスキャンを実行する必要があると言うべきでした.

4

4 に答える 4

4

clamscan の代わりに clamdscan を使用します。Clamdscan は常に実行されているビルトイン デーモンを使用し、(clamscan のように) 毎回ウイルス テーブルをロードする必要はありません。

于 2011-09-23T01:08:46.833 に答える
3

結果をすぐにユーザーに表示する必要がない場合は、後でスキャンするためにファイルをデータベース テーブルに追加できます。

次に、新しいプロセスをフォークして、テーブル内の結果をスキャンおよび更新できます。ここに良い例があります: http://robert.accettura.com/blog/2006/09/14/asynchronous-processing-with-php/

絶対に同じリクエスト内で結果を表示する必要がある場合は、前に述べたのとまったく同じように実行できますが、AJAX 経由で結果をリクエストする一時ページを出力します。スキャンが終了したら、ユーザーを結果ページにリダイレクトします。

JavaScript を使用したくない場合は、単純なメタ リフレッシュ タグで十分です。

于 2009-03-18T00:47:33.477 に答える
1

理想的には、これらのスキャンをバッチ処理できる別のボックスに別のアプリケーションをセットアップします。そのボックスは、フロントエンド サービスが読み取ってユーザーに報告できるデータベースにステータスを更新できます。

于 2009-03-18T00:48:23.943 に答える
1

これを最新の状態に保つには: 現在、ClamAV へのソケット接続を使用し、PHP を介したファイル スキャンをかなり高速に初期化する PHP ライブラリがあります。

https://github.com/jonjomckay/quahog

スキャンは www-data ではなく clamav ユーザーによって実行されるため、必ず正しい権限を使用してください。

于 2016-09-28T12:13:39.040 に答える