2016-04-19 4 views
1

Это оригинальная функция, и это работает отлично ...Почему эта функция не работает? PHP

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; 
} 

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

+0

Любые ошибки? Что в ваших журналах ошибок? –

+0

@JayBlanchard 'Почему эта функция не работает?' должен ли я провести еще один флаг? или сохранить его как есть? : D –

+0

@JayBlanchard нет ошибок, просто не удаляется каталог и его файлы –

ответ

0

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

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

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

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

Спасибо за ответ, я меняю свой код таким образом, но все же моя проблема была опечаткой:) –

0

Может быть ScanDir поможет:

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); 
} 

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

+0

Спасибо за ваш ответ, я решил свою проблему, но я попробую ваш код :) –