From 034556f687a6382d2162ccceca38590c5e994396 Mon Sep 17 00:00:00 2001 From: Repellent Date: Wed, 8 Oct 2025 18:35:14 +0500 Subject: [PATCH] =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20rr?= =?UTF-8?q?mdir=20---=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE=20=20$objects=20=D0=B3=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BC=D0=B0=D1=81=D1=81=D0=B8=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/func.common.php | 69 +++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 28 deletions(-) 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; +} /**