如何优化clamav cl_scan文件以便它更快?平均而言扫描文件大约需要15-20秒。因此,如果在一种形式中我有2个上传字段,则需要将近40秒或更长时间,这将导致php max执行时错误。
我宁愿不改变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] = "";
}
答案 0 :(得分:1)
通过添加
来减少1/2的时间
clamav.load_db_on_startup=1
至/etc/php5/mods-available/clamav.ini
extension=clamav.so
[clamav]
clamav.dbpath="/usr/local/share/clamav"
clamav.load_db_on_startup=1
clamav.maxreclevel=16
clamav.maxfiles=10000
clamav.maxfilesize=26214400
clamav.maxscansize=104857600
clamav.keeptmp=0
clamav.tmpdir="/tmp"
仍然需要大约7-8秒,具体取决于文件大小。
http://php-clamav.sourceforge.net/parameters.php#load_db_on_startup
答案 1 :(得分:0)
我不认为自己是Clam AV的专家,但我的理解是没有任何方法可以优化每个文件的调用,除非你可以删除一些签名数据库(在很多情况下你不能)。例如,如果您知道该文件永远不会在Windows系统上使用,则可以消除Windows签名数据库,从而节省大量时间。不过要小心,因为它可能会适得其反。虽然更改PHP超时值可能更好,我同意你不应该这样做。
然而,Clam AV使用多线程守护程序,因此您可以执行的另一项优化是同时运行每个文件扫描(多线程或多处理)。这对于少量大型文件来说无济于事,但它可能会对大量小文件产生很大影响。这是我要采取的方法。有a great post on PHPlens covering parallel processing in PHP。您也可以使用an open source Pthread library for PHP。它可以在用户Krakjoe的Github上获得。
答案 2 :(得分:0)
默认的ubuntu clamav(sudo apt-get install calmav)是用mpi-编译来加速的:
sudo mpirun -np $(grep -c ^processor /proc/cpuinfo) clamscan -r --bell -r /
还需要一段时间,但要试一试