2016-04-19 10 views
1

Dies ist die ursprüngliche Funktion und das funktioniert perfekt ...Warum funktioniert diese Funktion nicht? 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; 
    } 

Ich habe versucht, eine Version mit geschweiften Klammern und verschiedenen Namen zu tun, aber es funktioniert nicht, und ich bin nicht sicher, was das Problem ist

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

Was ich vermisse? Ich hoffe, Sie können mir helfen, danke im Voraus

+0

Irgendwelche Fehler? Was ist in Ihren Fehlerprotokollen? –

+0

@JayBlanchard 'Warum funktioniert diese Funktion nicht?' sollte ich noch eine Flagge ausgeben? oder behalten Sie es so wie es ist? : D –

+0

@JayBlanchard keine Fehler, löscht gerade nicht das Verzeichnis und seine Dateien –

Antwort

0

Ein mögliches Problem in, wie Sie es geschrieben haben, ist, dass, wenn der Ordner nicht existiert oder wegen Erlaubniseinschränkungen oder Dateisystemfehlern nicht geöffnet werden kann, die while-Schleife noch läuft .

Hier ist, wie das ursprüngliche Skript geschweiften Klammern geschrieben mit

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

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

Danke für Sie beantworten, ändere ich meinen Code auf diese Weise, aber immer noch mein Problem war ein Tippfehler:) –

0

Vielleicht sollte scandir helfen:

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

Wenn diese Funktion wird nicht funktionieren, uncomment Echo und Sie werden sehen, was Dateien, die es zu löschen versucht.

+0

Danke für deine Antwort, ich habe mein Problem gelöst, aber ich werde deinen Code ausprobieren :) –

Verwandte Themen