PHP Windows, rmdir символьной папки

Недавно я боролся с удалением символьных папок с контентом на окнах в 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.

0

Решение

При удалении символической ссылки вы должны рассматривать ее как файл, а не каталог. Итак, вам нужно использовать unlink, а не rmdir!

HTH 🙂

0

Другие решения

Узнал, что происходит.

Оказывается, это не было связано с PHP — эти папки находились под контролем версий в TortoiseSVN и NetBeans, которые случайно каким-то образом путались с символическими ссылками.

Не могу повторить поведение сейчас.

Спасибо:)

0

По вопросам рекламы [email protected]