1

コードの何が問題なのか疑問に思っていました.clamscanを使用すると、/ tmpからの読み取り、またはパスの手動指定の両方で正常に動作します。しかし、clamdscan を使用すると、/tmp からのすべてのパスでエラーが発生します (int の結果は 2 です)。これがコードです。

    $command = 'clamdscan ' . escapeshellarg($_FILES['file']['tmp_name']);
    $out = '';
    $int = -1;
    exec($command, $out, $int);

    echo "\n" . $command;
    echo "\n" . $out;
    echo "\n This is int = " . $int;
    if ($int == 0) {
        // all good, code goes here uploads file as normal IE move to
        //echo "File path : ".$file."Return code : ".cl_pretcode($retcode); 
        //echo "\n";
        move_uploaded_file($_FILES["file"]["tmp_name"], "filesave/" . $_FILES["file"]["name"]);
        echo "Stored in: " . "filesave/" . $_FILES["file"]["name"]; 
    } else {
        echo "\n FAILED";
    }

上記のコードに基づいて、 $int = 2 であるため失敗します。ただし、コマンドを次のように変更すると、

//some file that is saved already in the directory
$command = 'clamdscan ' . '/abc/abc.txt';

それは完全にうまく機能します。

コマンドが clamdscan の場合にのみ失敗しました。clamscan を使用する場合、一時ディレクトリは問題ありません

何か案が?

4

2 に答える 2

0

コマンドを実行してその出力を解析することに頼るのではなく、実際には多くの clamd クライアントの 1 つを使用する必要があります。これは非常に壊れやすく、将来的には頭痛の種になるだけです。例えば:

http://torquecp.sourceforge.net/phpclamcli.html

自分でやるタイプの場合、clamd ワイヤ プロトコルは非常に単純であり ( http://linux.die.net/man/8/clamd )、単純なクライアントを数時間で作成できる可能性があります。繰り返しになりますが、ここでの利点は、明確に定義されたプロトコルであり、clamd サービスと webapp を完全に異なるセキュリティ資格情報で操作できるストリーミング呼び出しなどの優れた機能を備えていることです (別のボックスで実行することもできます)。

これが役立つことを願っています。

于 2013-05-27T22:29:35.767 に答える