PHP рекурсивно удаляет папки

Вот функция, которую я использую для рекурсивного удаления папок и файлов

function rmdir_recursively($dir) {
    if (!is_dir($dir) || is_link($dir)) return unlink($dir); 
        foreach (scandir($dir) as $file) { 
            if ($file == '.' || $file == '..') continue; 
            if (!rmdir_recursively($dir . DIRECTORY_SEPARATOR . $file)) { 
                chmod($dir . DIRECTORY_SEPARATOR . $file, 0777); 
                if (!rmdir_recursively($dir . DIRECTORY_SEPARATOR . $file)) return false; 
            }; 
        } 
        return rmdir($dir); 
}

Проблема в том, что когда я отправляю какую-то папку в корень, она удаляет эту папку. Но когда я отправляю саму корневую папку вот так

rmdir_recursively("./");

Он возвращает кучу ошибок, как показано ниже

PHP Warning:  unlink(.//wp/wp-admin/network) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /home/vefa/public_html/deploy.php on line 52
[07-Oct-2012 02:16:09] PHP Warning:  unlink(.//wp/wp-admin/user) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /home/vefa/public_html/deploy.php on line 52
[07-Oct-2012 02:16:09] PHP Warning:  unlink(.//wp/wp-content) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /home/vefa/public_html/deploy.php on line 52
[07-Oct-2012 02:16:09] PHP Warning:  unlink(.//wp/wp-content/plugins) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /home/vefa/public_html/deploy.php on line 52
[07-Oct-2012 02:16:09] PHP Warning:  unlink(.//wp/wp-content/plugins/akismet) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /home/vefa/public_html/deploy.php on line 52

Что мне не хватает?


person heron    schedule 07.10.2012    source источник
comment
почему бы не сделать это в 1 строку: exec('rm -fr $path');   -  person JvdBerg    schedule 07.10.2012
comment
@JvdBerg 2 вопроса: будет ли это работать на общем сервере? А как исключить из удаления сам скрипт?   -  person heron    schedule 07.10.2012
comment
Большинство общих хостеров позволяют вам это сделать.   -  person JvdBerg    schedule 07.10.2012
comment
@JvdBerg, как исключить сам скрипт?   -  person heron    schedule 07.10.2012
comment
вы можете изменить права доступа или использовать find с exec для удаления и исключения сценария. Или переместите скрипт подальше, удалите, а затем верните обратно. ОС предназначена для работы с файлами, а php нет. Чего вы пытаетесь достичь?   -  person JvdBerg    schedule 07.10.2012
comment
@JvdBerg chat.stackoverflow.com/rooms/17593/room   -  person heron    schedule 07.10.2012


Ответы (1)


Вы говорите, что отправляете его rmdir_recursively("./");?

Но посмотрите на код, позже вы вызываете rmdir_recursively($dir . DIRECTORY_SEPARATOR . $file).

Это означает, что вы будете пытаться удалить файлы в ".//".

Вот почему ваше сообщение об ошибке содержит unlink(.//wp/wp-admin/user)

Вместо этого используйте rmdir_recursively(".");.

person Richard    schedule 07.10.2012