Я установил некоторый PHP для удаления каталога, его содержимого и любого подкаталога и его содержимого … Я новичок в PHP, поэтому я определенно делаю что-то НЕПРАВИЛЬНОЕ или делаю что-то самым неэффективным способом.
Ищете некоторые рекомендации или предложения о том, как это сделать лучше …
Кстати, этот код работает нормально. Использование PHP 5.3.8.
chmod($main_dir, 0755); if ($handle = opendir($main_dir)) { while (false !== ($entry = readdir($handle))) { $absolute_path = $main_dir.'/'.$entry; if ($entry != "." && $entry != "..") { chmod($absolute_path, 0755); unlink($absolute_path); //check if any folders exist, then delete files within if (file_exists($absolute_path) && is_dir($absolute_path)) { if ($child_handle = opendir($absolute_path)) { while (false !== ($child_entry = readdir($child_handle))) { $child_absolute_path = $absolute_path.'/'.$child_entry; if ($child_entry != "." && $child_entry != "..") { chmod($child_absolute_path, 0755); unlink($child_absolute_path); } } closedir($child_handle); } } rmdir($absolute_path); } } closedir($handle); } rmdir($main_dir);
Есть предположения? Очень признателен! Я использую PHP 5.3.8
Вы можете использовать RecursiveDirectoryIterator
для отображения всех файлов и папок, а затем удалить их. Обратите внимание, что вам необходимо использовать RecursiveIteratorIterator::CHILD_FIRST
чтобы файлы были удалены перед папкой.
$dir = __DIR__ . "/test"; $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); foreach ( $ri as $file ) { $file->isDir() ? rmdir($file) : unlink($file); }