Ошибка rmdir () с определенным именем файла? Доступ запрещен

Во-первых, давайте уберем их:

  • В каталоге нет открытых ручек.
  • В каталоге нет файлов.
  • chmod с разрешениями до 0777 не предотвращает ошибку.
  • имя каталога верное.

Теперь, вот моя проблема. rmdir() бросает эту ошибку при попытке удалить каталог:

rmdir (098f6bcd4621d373cade4e832627b4f6) [function.rmdir]: разрешение отклонено в пути \ to \ administratorate.php в строке 124

098f6bcd4621d373cade4e832627b4f6 – это имя каталога.

Вот соответствующая часть скрипта.

 if(is_dir($userhash)) : foreach (new DirectoryIterator($userhash) as $fileInfo) { $fileName = $fileInfo->getFilename(); if($fileInfo->isDot()) continue; if(!rename($userhash.'/'.$fileName , 'trashcan/'.$username.'/'.$fileName)) { echo '<p class="error">Could not move '.$fileName.'</p>'; $err = 1; } } else : echo '<p class="error">Unable to delete files! error: 67</p>'; $err = 1; endif; //JUST TO BE SURE chmod('./',0777); chmod($userhash,0777); // RMDIR ONCE THE DIR IS EMPTY. if(rmdir($userhash)) echo '<p class="success">Deleted the user directory. The files are in the trash.</p>'; else { echo '<p class="error">Could not remove the user directory. Error: 656</p>'; $err = 1; } 

Обновить

Я вручную создал dir 'jake' в том же каталоге. Я сделал rmdir('jake'); и он отлично поработал. Теперь я вручную создал '098f6bcd4621d373cade4e832627b4f6' в том же каталоге. Я сделал rmdir('098f6bcd4621d373cade4e832627b4f6'); и это ошибка!

Обновление 2

Это начинает выглядеть как какая-то странная ошибка rmdir() , что маловероятно, как кажется. Вот имена каталогов, которые я создал, а затем попытались удалить с помощью rmdir ;

 098f6bcd4621d373cade4e832627b4f6 | didn't work (quintuple checked) 098f6bcd4621d373cade4e832627b4f7 | worked 098f6bcd4621d373cade4e832627b4f | worked 098f6bcd4621d373cade4e832627b4f66 | worked 

Solutions Collecting From Web of "Ошибка rmdir () с определенным именем файла? Доступ запрещен"

Чтобы удалить файл:

  • пользователь должен иметь права на запись в каталог PARENT
  • флаг ограниченного удаления НЕ должен быть установлен для каталога PARENT

UPDATE: об ограниченном флаге удаления – от man chmod :

ОГРАНИЧЕННЫЙ УДАЛЕННЫЙ ФЛАГ ИЛИ СТИЛЬНЫЙ БИТ

Флаг ограниченного удаления или липкий бит – это один бит, интерпретация которого зависит от типа файла. Для каталогов он запрещает непривилегированным пользователям удалять или переименовывать файл в каталоге, если только они не владеют файлом или каталогом; это называется флагом ограниченного удаления для каталога и обычно встречается в каталогах, доступных для записи в мире, таких как / tmp. Для обычных файлов в некоторых более старых системах бит сохраняет текстовое изображение программы на устройстве подкачки, поэтому он будет загружаться быстрее при запуске; это называется липким битом.

Вы можете установить его, добавив 1 к первой восьмеричной цифре в режиме, например:

 chmod 1xxx dirname 

ОБНОВЛЕНИЕ 2:

У пользователя, под которым выполняется php, есть разрешения для родительского каталога chmod?

Другими словами, вы уверены, что первый вызов chmod возвращает true?

 chmod('./',0777);