如何优化clamav cl_scanfile,使它更快?平均需要15-20秒扫描文件。因此,如果在一个表单中我有2个上传字段,它将需要几乎40秒或更多,这将导致php最大执行时间错误。
我宁愿不改变php的执行时间。
有办法吗?
我的代码如下所示:
function upload() {
...
// Checking element type based on element id.
// if element type == file, check the file type. Based on the result, halt (redirect to failure) or continue
foreach ($this->_controller->data['FormSubmission'] as $elementId => $fieldValue) {
...
...
//Checking The File for Virus
$retcode = cl_scanfile($fieldValue["tmp_name"], $virus_name);
//if Virus not found
if ($retcode != CL_VIRUS) {
//Check Directory if uploadPath is not a directory, make it
if (!is_dir($uploadPath)) {
mkdir($uploadPath, 0777, TRUE);
}
//filename
$now = date('Ymd-His');
$fileName = $now . '-' . $elementId . $fieldValue["name"];
$fullFilePath = $uploadPath . '/' . $fileName;
$uploading = move_uploaded_file($fieldValue["tmp_name"], $fullFilePath);
// change the value to uploadPath for ul/dl
$this->_controller->data["FormSubmission"][$elementId] = $fullFilePath;
} else {
//If Virus found, don't upload anything
$this->_controller->data["FormSubmission"][$elementId] = "";
}
4条答案
按热度按时间zbdgwd5y1#
通过添加以下内容,将时间缩短了1/2
clamav.load_db_on_startup=1
至/etc/php5/mods-available/clamav.ini
仍然需要大约7-8秒,这取决于文件大小。
http://php-clamav.sourceforge.net/parameters.php#load_db_on_startup
vltsax252#
我不认为自己是ClamAV方面的Maven,但我的理解是,没有任何方法可以优化每个文件的调用,除非您可以消除一些签名数据库(在很多情况下你不能)。例如,如果你知道这个文件永远不会在Windows系统上使用,你可以删除Windows签名数据库,从而节省大量的时间。但是要小心,因为这可能会适得其反。不过这可能比更改PHP超时值更好,我同意您不应该这样做。
ClamAV使用多线程守护进程,但是,另一件您可能可以优化的事情是同时运行每个文件扫描(多线程或多处理)。这对于少量的大文件没有太大的帮助,但是对于大量的小文件来说,它会有很大的不同。这是我会采用的方法。有a great post on PHPlens covering parallel processing in PHP。你也可以使用an open source Pthread library for PHP。它s可在Github上以用户Krakjoe的身份获得。
lx0bsm1f3#
默认的ubuntu clamav(sudo apt-get install calmav)是用mpi编译的-所以用下面的方法来加快速度:
sudo mpirun -np $(grep -c ^processor /proc/cpuinfo) clamscan -r --bell -r /
还需要一段时间,但给予看
yqyhoc1h4#
提示:ClamAV不是一个传统的防病毒或端点安全套件。要获得功能齐全的现代端点安全套件,请查看Cisco Secure Endpoint。请参阅下面的“相关产品”以了解更多详细信息。
https://docs.clamav.net/