функция rrmdir ---добавлена проверка что $objects гарантированно массив
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user