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

0

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

Почувствую помощь, Сиваэль.

Теги:
symlink
rmdir

2 ответа

0
Лучший ответ

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

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

Невозможно воспроизвести поведение сейчас.

Благодаря:)

0

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

HTH :)

  • 0
    На окнах это не так, к сожалению. В Linux это работает так, как вы описали.
  • 1
    Может быть, что-то глупое, как это требует косой черты в конце? Или нет?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню