Недавно я боролся с удалением символических папок с содержимым в Windows на PHP.
Процесс, который я делаю, это: 1. файлы/папки symlink из местоположения A в местоположение B (все хорошо) 2. отсоединить все файлы/папки из местоположения B
Теперь это становится все сложнее. Мой код:
echo("\n unlinking: ".$pre.$folder.'/'.$elem);
if(file_exists($pre.$folder.'/'.$elem)){
if(isWindows()){
if(is_dir($pre.$folder.'/'.$elem)){
rmdir($pre.$folder.'/'.$elem);
} else {
unlink($pre.$folder.'/'.$elem);
}
} else {
unlink($pre.$folder.'/'.$elem);
}
} else {
echo("\n -> Not there. \n");
}
Все работает правильно, если целью является файл или пустая папка. Однако, если в символической папке есть содержимое, я получаю предупреждение о том, что я не могу удалить непустую папку, и папка не будет удалена.
Warning: rmdir(dirname): Directory not empty
Это означает, что символическая папка с содержимым в окнах несъемна при использовании rmdir (рекомендуемая операция).
Я могу удалить эту папку вручную в проводнике Windows и работает правильно (удаляет только символическую ссылку).
Почувствую помощь, Сиваэль.
Узнал, что происходит.
Оказывается, в конце концов, это не связано с PHP - эти папки находились под управлением версиями в TortoiseSVN и NetBeans, которые каким-то образом конфликтовали с символическими ссылками.
Невозможно воспроизвести поведение сейчас.
Благодаря:)
При удалении символической ссылки вам нужно рассматривать ее как файл, а не каталог. Итак, вам нужно использовать unlink, а не rmdir!
HTH :)