diff --git a/functions/func.common.php b/functions/func.common.php index 248eb40..4ae6216 100644 --- a/functions/func.common.php +++ b/functions/func.common.php @@ -71,38 +71,51 @@ } - /** - * Рекурсивно чистит директорию - * - * @param string $dir директория - * @param int $result - * - * @return bool - */ - function rrmdir($dir, &$result = 0) - { - if (is_dir($dir)) - { - $objects = scandir($dir); +/** + * Рекурсивно чистит директорию + * + * @param string $dir директория + * @param int $result + * + * @return bool + */ +function rrmdir($dir, &$result = 0) +{ + if (is_dir($dir)) + { + // 1. ИСПОЛЬЗУЕМ @ ДЛЯ ПОДАВЛЕНИЯ ПРЕДУПРЕЖДЕНИЙ И + // 2. СРАЗУ ПРОВЕРЯЕМ, ЯВЛЯЕТСЯ ЛИ РЕЗУЛЬТАТ МАССИВОМ + $objects = @scandir($dir); - foreach ($objects as $object) - { - if ($object != '.' && $object != '..') - { - if (filetype($dir . '/' . $object) == 'dir') - rrmdir($dir . '/' . $object, $result); - else - $result = $result + (unlink($dir . '/' . $object) ? 0 : 1); - } - } + if (is_array($objects)) // <-- ДОБАВЛЕНА ПРОВЕРКА! + { + foreach ($objects as $object) + { + if ($object != '.' && $object != '..') + { + if (filetype($dir . '/' . $object) == 'dir') + rrmdir($dir . '/' . $object, $result); + else + $result = $result + (unlink($dir . '/' . $object) ? 0 : 1); + } + } + } + else + { + // Если scandir вернул false, мы не смогли прочитать директорию, + // поэтому считаем, что удаление невозможно. + $result++; + return false; + } - reset($objects); + // 3. БЕЗОПАСНО ВЫЗЫВАЕМ reset(), так как $objects гарантированно массив + reset($objects); - $result = $result + (rmdir($dir) ? 0 : 1); - } + $result = $result + (rmdir($dir) ? 0 : 1); + } - return $result > 0 ? false : true; - } + return $result > 0 ? false : true; +} /**