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

使用 clamdscan 而不是 clamscan。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

为了保持最新状态:现在有一个 PHP 库正在使用与 ClamAV 的套接字连接并通过 PHP 快速初始化文件扫描。

https://github.com/jonjomckay/quahog

请务必使用正确的权限,因为扫描将由 clamav 用户完成,而不是 www-data。

于 2016-09-28T12:13:39.040 回答