我想知道我的代码有什么问题,如果我使用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,临时目录很好
任何想法?
答案 0 :(得分:0)
你应该真的只使用那里的众多clamd客户端中的一个,而不是依赖于执行命令并解析其输出,这是非常脆弱的,并且将来会给你带来一些麻烦。例如:
http://torquecp.sourceforge.net/phpclamcli.html
如果您是自己动手的类型,那么clamd wire协议非常简单(http://linux.die.net/man/8/clamd),您可能会在几个小时内编写一个简单的客户端。同样,这里的好处是它是一个定义良好的协议,并且具有一些很好的功能,例如允许您操作clamd服务的流式调用以及具有完全不同的安全凭证的Web应用程序(哎呀它们甚至可以在不同的盒子上运行)。
我希望这会有所帮助。
答案 1 :(得分:0)
快速说明一下使用http://torquecp.sourceforge.net/phpclamcli.html作为DIY cli执行程序的更好替代方法。前面提到的php脚本也完全依赖clamav响应文本的语法。