php не удалит 775 dir chmod - PullRequest
       32

php не удалит 775 dir chmod

3 голосов
/ 06 сентября 2010

ОК, помогите мне понять это.

У меня в системе Linux 2 пользователя, которые ОБА являются частью группы "веб-пользователи".

один - это www-данные, используемые веб-сервером.и php-cgi one - мой ftp-пользователь

, когда я загружаю файлы через ftp, они устанавливаются на 775 для dirs и 664 для файлов, когда я запускаю скрипт на сервере (такая же группа, как у пользователя ftp), чтобы удалить этот каталог и файлы внутри: unlink для файлов работает нормально, но команда rmdir не работает, возвращение разрешения запрещено !?И да, каталог удаляется после опустошения.

, почему этот 775 означает, что пользователь группы может удалить его, как и 664 для файлов.

Спасибо!

Ответы [ 3 ]

1 голос
/ 16 октября 2010

Вы можете проверить permissions из parent, который содержит каталог, который вы пытаетесь удалить.

Я удалял некоторые сгенерированные скриптом каталоги ранее на этой неделе, и даже с их разрешениями, установленными на777, я все еще получал «разрешение отказано», пока я не дал себе Write доступ к каталогу parent.

0 голосов
/ 06 сентября 2010

Я сталкивался с той же проблемой раньше, и мой код выглядел следующим образом:

function recurse_delete_dir($dir) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != '.' && $file != '..') {
                 $child_file = $dir . $file;
                 if (is_dir($child_file)) {
                     recurse_delete_dir($child_file);
                 }
                 else {
                     unlink($child_file);
                 }
            }
        }
        rmdir($dir);
    }
}

Я сам думал, что это проблема с разрешением, но оказалось, что мне просто нужно было позвонить closedir до rmdir-ную.Итак:

closedir($dh);
rmdir($dir);

Может, ваша проблема похожа на мою?

0 голосов
/ 06 сентября 2010

Вы не можете использовать rmdir () в каталоге, содержащем файлы.Каталог должен быть пустым , прежде чем использовать rmdir () для его удаления.

...