Удаление файлов на сервере php

357
05 мая 2019, 11:20

На сервере приблизительно 30 сайтом и в каждой папке файлы с мусором (вирусом), я знаю размер и название файлов(они повторяются), пробвал написать код на PHP чтоб проверил каждую папку и удалил файл с параметрами "file_name" и "file_size"

Пробовал следующий код

rrmdir('site');
function rrmdir($dir){
    $file_name = "406.php";
    $file_size = 314;
    if (is_dir($dir)){
        if ($dh = opendir($dir)){
            while (($file = readdir($dh)) !== false){
                $file_delete = dirname(__FILE__) . $file;
                unlink($file_delete);
            }
        closedir($dh);
        }
    }
}

Но получаю ошибку

Warning: unlink(site\lending.loc): Permission denied in on line site\lending.loc 12

задача следующая

Надо проверить все папки в указаной папке и удалить файлы с указаными параметрами - название и размер

Буду благодарный за помощь

Answer 1

Надо хотя бы добавить условие в цикле:

if($file == $file_name && filesize($dir.'/'.$file) == $file_size)

, чтобы проверить что файл вообще нужно удалять. и вот тут:

$file_delete = dirname(__FILE__) . $file;

dirname(FILE) указывает на директорию в которою лежит файл с методом. Т е читаете вы один файл, а удалить пытаетесь другой. Попробуйте так:

rrmdir('site');
function rrmdir($dir){
    $file_name = "406.php";
    $file_size = 314;
    if (is_dir($dir)){
        if ($dh = opendir($dir)){
            while (($file = readdir($dh)) !== false){
               if($file == $file_name && filesize($dir.'/'.$file) == $file_size){    
                   $file_delete = $dir . '/' . $file;
                   unlink($file_delete);
               }
            }
        closedir($dh);
        }
    }
}
Answer 2

Добавлю полностью код может кому понадобится

rrmdir('site'); /*папка где будет выполнятся действия*/

function rrmdir($dir){
    if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir"){
          rrmdir($dir."/".$object);
        }  
        else {
            $file_name = "406.php"; /*Название файла*/
            $file_size = 314; /*Размер файла в байтах*/
            if (is_dir($dir)){
                if ($dh = opendir($dir)){
                    while (($file = readdir($dh)) !== false){
                       if($file == $file_name && filesize($dir.'/'.$file) == $file_size){    
                           $file_delete = $dir . '/' . $file;
                           unlink($file_delete);
                       }
                    }
              closedir($dh);
           }
         }
        }
      }
    }
  }
}
Answer 3

Дешево и сердито: в командной строке:

find -type f -name '406.php' -size 314c -exec rm -f {} \;

Если не умеете в консоли, сделайте скриптик del.php, но должна быть включена функция shell_exec:

`find -type f -name '406.php' -size 314c -exec rm -f {} \;`;
READ ALSO
Что посоветуете как узнать какое номер присвоит база данных при добавление нового id

Что посоветуете как узнать какое номер присвоит база данных при добавление нового id

Что посоветуете, как узнать, какое номер присвоит поле id в базе данных при добавление нового idЯ добавляю новые данные из формы в таблицу, далее...

130
Workerman PHP Client

Workerman PHP Client

Создаю веб сервер сокетов с помощью Workerman

385
Как получить данные с полей html(php mysql) в js

Как получить данные с полей html(php mysql) в js

Можно ли как то корректно получить данные с таблицы строки которой выводятся циклом php из mysql?

173