Мне нужен скрипт, который может удалить весь каталог со всеми их подпапками, файлами и т. Д. Я попытался с помощью этой функции, которую я нашел в Интернете до нескольких месяцев назад, но она не работает полностью.
function deleteFile($dir) { if(substr($dir, strlen($dir)-1, 1) != '/') { $dir .= '/'; } if($handle = opendir($dir)) { while($obj = readdir($handle)) { if($obj != '.' && $obj != '..') { if(is_dir($dir.$obj)) { if(!deleteFile($dir.$obj)) { echo $dir.$obj."<br />"; return false; } } elseif(is_file($dir.$obj)) { if(!unlink($dir.$obj)) { echo $dir.$obj."<br />"; return false; } } } } closedir($handle); if(!@rmdir($dir)) { echo $dir.'<br />'; return false; } return true; } return true; }
Для теста я использую распакованный архив prestashop, и я пытаюсь удалить папку, в которой архив распакован, но он не работает.
/home/***/public_html/prestashop/img/p/3/ /home/***/public_html/prestashop/img/p/3 /home/***/public_html/prestashop/img/p /home/***/public_html/prestashop/img
Это папки с проблемами. В первый раз я думаю: «Может быть, проблема с chmod файлов», но когда я тестирую все файлы с разрешением 685 (см. 777), то результат был таким же.
<?php function rrmdir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink ($dir."/".$object); } } reset($objects); rmdir($dir); } } ?>
Попробуйте приведенный выше код с php.net
Отлично работает для меня
Вы можете использовать более чистый метод для рекурсивного удаления каталога.
Пример:
function recursiveRemove($dir) { $structure = glob(rtrim($dir, "/").'/*'); if (is_array($structure)) { foreach($structure as $file) { if (is_dir($file)) recursiveRemove($file); elseif (is_file($file)) unlink($file); } } rmdir($dir); }
Применение:
recursiveRemove("test/dir/");
Самый простой и лучший способ использования метода system ()
$dir = dirname ( "/log" ); if ($handle = opendir($dir)) { while (( $file = readdir($handle)) !== false ) { if ($file != "." && $file != "..") { system("rm -rf ".escapeshellarg($dir.'/'.$file)); } } } closedir($handle);
function delete_files($dir) { foreach(glob($dir . '/*') as $file) { if(is_dir($file)) delete_files($file); else unlink($file); } rmdir($dir); }
/** * Deletes a directory and all files and folders under it * @return Null * @param $dir String Directory Path */ function rmdir_files($dir) { $dh = opendir($dir); if ($dh) { while($file = readdir($dh)) { if (!in_array($file, array('.', '..'))) { if (is_file($dir.$file)) { unlink($dir.$file); } else if (is_dir($dir.$file)) { rmdir_files($dir.$file); } } } rmdir($dir); } }