Как я рекурсивно удаляю каталог и его все содержание (файлы + sub директора) в PHP?

Как я удаляю каталог и его все содержание (файлы и подкаталоги) в PHP?

123
задан tshepang 23 August 2014 в 21:45
поделиться

3 ответа

Пользовательский раздел на странице руководства rmdir содержит достойную реализацию:

 function rrmdir($dir) { 
   if (is_dir($dir)) { 
     $objects = scandir($dir); 
     foreach ($objects as $object) { 
       if ($object != "." && $object != "..") { 
         if (is_dir($dir."/".$object) && !is_link($dir."/".$object))
           rrmdir($dir."/".$object);
         else
           unlink($dir."/".$object); 
       } 
     }
     rmdir($dir); 
   } 
 }
191
ответ дан 24 November 2019 в 01:11
поделиться

Для * nix вы можете использовать shell_exec для rm -R или DEL / S имя_папки для Windows.

13
ответ дан 24 November 2019 в 01:11
поделиться

На основе Комментарий разработчика Pixel , фрагмент, использующий SPL, может выглядеть так:

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($files as $fileinfo) {
    $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
    $todo($fileinfo->getRealPath());
}

rmdir($dir);

Примечание: он не выполняет никакой проверки работоспособности и использует флаг SKIP_DOTS, представленный с FilesystemIterator в PHP 5.3.0. Конечно, $ todo может быть if / else . Важным моментом является то, что CHILD_FIRST используется для перебора дочерних элементов (файлов) сначала перед их родительскими (папками).

108
ответ дан 24 November 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: