Недавно я боролся с удалением символьных папок с контентом на окнах в PHP.
Процесс, который я делаю:
1. символические ссылки файлы / папки из местоположения 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
Это означает, что символьная папка с содержимым в Windows не может быть удалена при использовании rmdir (рекомендуемая операция).
Я могу удалить эту папку вручную в проводнике Windows, и это работает правильно (удаляет только символическую ссылку).
Буду признателен за помощь,
Sivael.
При удалении символической ссылки вы должны рассматривать ее как файл, а не каталог. Итак, вам нужно использовать unlink, а не rmdir!
HTH 🙂
Узнал, что происходит.
Оказывается, это не было связано с PHP — эти папки находились под контролем версий в TortoiseSVN и NetBeans, которые случайно каким-то образом путались с символическими ссылками.
Не могу повторить поведение сейчас.
Спасибо:)