Почему эта функция не работает? Переполнение стека

Это оригинальная функция, и она прекрасно работает …

    function delete_directory($dirname) {

if (is_dir($dirname))
$dir_handle = opendir($dirname);

if (!$dir_handle)
return false;

while ($file = readdir($dir_handle)) {

if ($file != "." && $file != "..") {
if (!is_dir($dirname."/".$file))
unlink($dirname."/".$file);
else
delete_directory($dirname.'/'.$file);
}
}
closedir($dir_handle);
rmdir($dirname);
return true;
}

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

    function borrar_directorio ($carpeta) {

if (is_dir($carpeta)) {

$abrir_directorio = opendir($carpeta);

if (!$abrir_directorio) {

return false;
}
}

while ($archivo = readdir($abrir_directorio)) {

if ($archivo != "." && $archivo != "..") {

if (!is_dir($carpeta."/".$archivo)) {
unlink($carpeta."/".$achivo);

} else {

borrar_directorio($carpeta.'/'.$archivo);
}
}
}

closedir($abrir_directorio);
rmdir($carpeta);
return true;
}

Что мне не хватает? Я надеюсь, что вы можете помочь мне, спасибо заранее

1

Решение

Одна из возможных проблем в том, как вы это написали, заключается в том, что если папка не существует или не может быть открыта из-за ограничений прав доступа или ошибок файловой системы, цикл while все равно будет работать.

Вот как оригинальный скрипт должен быть написан с помощью фигурных скобок

  if(is_dir($carpeta))
{
$abrir_directorio = opendir($carpeta);
}
if(!$abrir_directorio)
{
return false;
}

while($archivo = readdir($abrir_directorio))
{ ...
0

Другие решения

Может быть, скандир поможет

public static function delTree($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
// echo "$dir/$file \n";
is_dir("$dir/$file"))
? delTree("$dir/$file")
: unlink("$dir/$file");
}
return rmdir($dir);
}

Если эта функция не будет работать, раскомментируйте echo, и вы увидите, какие файлы она пытается удалить.

0