функция rrmdir ---добавлена проверка что $objects гарантированно массив

This commit is contained in:
2025-10-08 18:35:14 +05:00
parent ed3cfafbf1
commit 034556f687

View File

@@ -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;
}
/**