Файл: controllers/cleaner.php
Строк: 68
<?php
session_start();
if (!isset($_SESSION['auth']))
{
die("0");
}
if (isset($_POST['startcode'])) $startcode = trim($_POST['startcode']); else die("0");
if (isset($_POST['finishcode'])) $finishcode = trim($_POST['finishcode']); else die("0");
if (isset($_POST['extensions'])) $extensions = addslashes(htmlspecialchars(strip_tags(trim($_POST['extensions'])))); else die("0");
if (isset($_POST['dofs'])) $dofs = addslashes(htmlspecialchars(strip_tags(trim($_POST['dofs'])))); else die("0");
if (isset($_POST['docl'])) { if(addslashes(htmlspecialchars(strip_tags(trim($_POST['docl'])))) == 2) $docl = true; elseif(addslashes(htmlspecialchars(strip_tags(trim($_POST['docl'])))) == 1) $docl = false; } else die("0");
if((strlen($startcode) < 4) || (strlen($finishcode)<3))
die("0");
chdir('../..');
$dir = getcwd().'/';
$ext = array();
$results = array();
$ext = explode(",", str_replace(" ", "", $extensions));
$dofsb = false;
$skip_files = array("signatyri.ssdb"); //название файла - который следует проигнорировать при проверке
switch ($dofs) {
case '1':
break;
case '2':
$dofsb = true;
break;
case '3':
$ext = null;
break;
default:
die("0");
break;
}
dir_walk($dir, $ext, true, $dir, $dofsb);
function dir_walk($dir, $types = null, $recursive = false, $baseDir = '', $dofsb)
{
global $results;
if ($dh = opendir($dir)) {
while (($file = readdir($dh))!== false)
{
if ($file === '.' || $file === '..')
{
continue;
}
if (is_file($dir.$file))
{
if (is_array($types))
{
if($dofsb)
{
if (!in_array(strtolower(pathinfo($dir.$file, PATHINFO_EXTENSION)), $types, true))
{
continue;
}
}
else
{
if (in_array(strtolower(pathinfo($dir.$file, PATHINFO_EXTENSION)), $types, true))
{
continue;
}
}
}
del_virus($baseDir, $file);
}
elseif($recursive && is_dir($dir.$file))
{
dir_walk($dir.$file.DIRECTORY_SEPARATOR, $types, $recursive, $baseDir.$file.DIRECTORY_SEPARATOR, $dofsb);
}
}
closedir($dh);
}
}
function del_virus($fdir, $ffile)
{
$flag = false;
$filename = $fdir.$ffile;
global $results, $startcode, $finishcode, $docl, $skip_files;
$status = "";
$virus_text = "";
$file=file($filename);
foreach($file as $k=>$v)
{
$pos_start = stripos($v, $startcode);
$pos_end = stripos($v, $finishcode);
if(($pos_start !== false) && ($pos_end !== false))
{
$virus_text = substr($v, $pos_start, $pos_end);
if (($virus_text != "") && (stristr($v, $virus_text)))
{
if (!$flag)
{
$flag=true;
if (in_array($ffile, $skip_files))
{
$status = "пропущен";
$results[] = array('file' => str_replace("\", "/", $fdir.$ffile), 'status' => $status);
$nfile[] = $v;
return;
}
elseif(!$docl)
{
$status = "заражен";
$results[] = array('file' => str_replace("\", "/", $fdir.$ffile), 'status' => $status);
}
}
}
}
else
$nfile[]=$v;
}
if(($docl) && ($virus_text!=""))
{
$file=fopen($filename,"w");
fwrite($file,implode($nfile,""));
fclose($file);
$status = "вылечен";
$results[] = array('file' => str_replace("\", "/", $fdir.$ffile), 'status' => $status);
}
}
if (!function_exists('json_encode')) {
function json_encode($content) {
require_once 'JSON.php';
$json = new Services_JSON;
return $json->encode($content);
}
}
echo json_encode($results);
?>