Я попробовал два рекурсивных скрипта, чтобы стереть содержимое папки:
Кулак:
function clearDirectory($path) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(get_home_path().$path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST); foreach ($files as $filename => $fileInfo) { if ($fileInfo->isDir()) { rmdir($filename); } else { unlink($filename); } } }
Второй:
function rrdir($path) { $src = get_home_path() . $path; $dir = opendir($src); while(false !== ( $file = readdir($dir)) ) { if (( $file != '.' ) && ( $file != '..' )) { $full = $src . '/' . $file; if ( is_dir($full) ) { rrmdir($full); } else { unlink($full); } } } closedir($dir); rmdir($src); }
В обоих случаях он делает то же самое. Но у меня возникла странная проблема: он не удаляет все файлы, которые он делает только для 527 из 706.
Если я запускаю любой из этих сценариев дважды, он удаляет все файлы … Но это не делается с первого раза.
Не имеет ничего общего с linux или любым другим проверенным разрешением, и все разрешения в порядке.
В журналах ошибок нет, все работает нормально с этими обоими сценариями, проблема в том, что они не удаляют все файлы с первого раза.
Я запускаю окна 10 x64, с виртуальным ящиком Vagrant и Homestead. Протестировано rm -f *
работает отлично. Что я делаю не так?
Как отмечает JustOnUnderMillions, есть две проблемы:
rmdir
, который требует, чтобы каталог был пустым. Вероятно, вы хотите вызвать rrdir
, другую функцию. rrdir
вызывает rrmdir
, которая не определена. Вы, вероятно, захотите позвонить rrdir
здесь. Хорошо, думаю, я обнаружил, что проблема не вызвана кодом. Проблема, вероятно, вызвана виртуальной коробкой homestead, которую я использую в качестве среды разработки, так как, когда я настраивал xampp на своей машине, он работал как шарм. Спасибо, ребята, за попытку исправить это.