У меня есть дерево каталогов, которое было передано массиву.
Я хотел бы иметь там пустые папки внутри этого массива.
Как определить пустые папки, такие как /wp-content/uploads/2014/02/
и /wp-content/uploads/2014/
. Как я могу удалить их рекурсивно.
Вот мой массив
array ( 0 => './do-update.php', 5 => './wp-config.php', 6 => './wp-content/', 7 => './wp-content/uploads/', 8 => './wp-content/uploads/2013/', 9 => './wp-content/uploads/2013/05/', 10 => './wp-content/uploads/2013/05/kabeduvarkad-1024x768.jpg', 26 => './wp-content/uploads/2013/05/kabeduvarkad2.jpg', 27 => './wp-content/uploads/2013/10/', 28 => './wp-content/uploads/2014/', 29 => './wp-content/uploads/2014/02/', 30 => './wp-content/uploads/de.php', 31 => './wp-update.tar.gz', 32 => './wp-update/', 33 => './wp-update/wp-update.tar', )
Большое спасибо Андрешу Сержу за него. Кто хочет рекурсивно удалять пустые папки с производительностью, вы можете использовать это решение.
function list_directory($dir) { $file_list = array(); $stack[] = $dir; while ($stack) { $current_dir = array_pop($stack); if ($dh = opendir($current_dir)){ while (($file = readdir($dh)) !== false) { if ($file !== '.' AND $file !== '..') { $current_file = "{$current_dir}/{$file}"; $report = array(); if (is_file($current_file)) { $file_list[] = "{$current_dir}/{$file}"; } elseif (is_dir($current_file)) { $stack[] = $current_file; $file_list[] = "{$current_dir}/{$file}/"; } } } } } sort($file_list, SORT_LOCALE_STRING); return $file_list; } function remove_emptyfolders($array_filelist){ $files = array(); $folders = array(); foreach($array_filelist as $path){ // better performance for is_dir function if ($path[strlen($path)-1] == '/'){ // check for last character if it is / which is a folder. $folders[] = $path; } else{ $files[] = $path; } } // bos olmayan klasorleri buluyoruz. // eger klasor ismi dosya isimlerinin icerisinde gecmiyorsa bos demektir? right? $folders_notempty = array(); foreach($files as $file){ foreach($folders as $folder){ if(strpos($file,$folder) !== false){ // dublicate olmasin diye key isimlerinin ismine yazdırdık. $folders_notempty[$folder] = $folder; } } } // bos olmayanla klasorleri, digerlerinden cikariyoruz. $folders_empty = array(); foreach($folders as $folder){ // eger bos olmayanlarin icerisinde bu dosya yoksa if(!in_array($folder, $folders_notempty)){ $folders_empty[] = $folder; } } // once en uzaktan silmeye baslamaliyiz. kisaca tersten. $folders_empty = array_reverse($folders_empty); $folders_deleted = array(); foreach($folders_empty as $k){ try{ $folders_deleted[$k] = 'NOT Succesfull'; if(rmdir($k)){ $folders_deleted[$k] = 'Deleted'; continue; } chmod($k, 0777); if(rmdir($k)){ $folders_deleted[$k] = 'Deleted after chmod'; } }catch (Exception $e) { print_r($e); } } return $folders_deleted; } $files = list_directory(getcwd()); //print_r($files); $files_deleted = remove_emptyfolders($files); print_r($files_deleted);