Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить все директории с одинаковым префиксом? 
:(
    Опции темы
Pavl
Дата 25.9.2020, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2016

Репутация: нет
Всего: нет



Добрый день!
Изучаю урок, касающийся работы с каталогами, файлами.
В каталоге есть директории с одинаковым префиксом (pref_)
Нужно удалить при помощи php все папки с таким префиксом.
Как это можно сделать?
Испробовал много вариантов, но ничего не получается.
Например, пробовал так:

Код

$dir = 'C:/OSPanel/domains/test/www/uroki/';

if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if (is_dir($dir . $entry) && strtolower(substr($entry, 0, 2)) == 'pref_') {
            rmdir($dir . $entry);
        }
    }
    closedir($handle);
}


При обновлении скрипта ничего не происходит, только пустой экран, а папки с префиксом pref_ остаются, не удаляются.



Это сообщение отредактировал(а) Pavl - 25.9.2020, 16:19

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Удаление_файлов_с_определённым_префиксом.JPG 56,56 Kb
PM MAIL   Вверх
Oldshelf
Дата 25.9.2020, 20:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 22.4.2018

Репутация: нет
Всего: 4



Код

$dir = 'C:/OSPanel/domains/test/www/uroki/';
if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if (is_dir($dir . $entry) && strtolower(substr($entry, 0, 5)) == 'pref_') {
            rmdir($dir . $entry);
        }
    }
    closedir($handle);
}

PM MAIL WWW   Вверх
Pavl
Дата 26.9.2020, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2016

Репутация: нет
Всего: нет



Oldshelf, да, папки удаляются, но только пустые, а если с каким-то файлом внутри, то нет. Можно ли, как-то удалить папку вместе с вложенными файлами?
PM MAIL   Вверх
Oldshelf
Дата 26.9.2020, 16:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 22.4.2018

Репутация: нет
Всего: 4



Можно, но не встроенной функцией:
Цитата

... Директория должна быть пустой и должны иметься необходимые для этого права. 


Советуют удалять такие директории с помощью рекурсии:
https://stackoverflow.com/questions/1653771/
https://habr.com/ru/sandbox/124577/
PM MAIL WWW   Вверх
Pavl
Дата 26.9.2020, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2016

Репутация: нет
Всего: нет





Скажите, пожалуйста, что я не так делаю? Попробовал по этой ссылке.

Код

$dir = 'C:/OSPanel/domains/test/www/uroki/';

function recursiveRemoveDir($dir) {

    $includes = glob($dir.'pref_');

    foreach ($includes as $include) {

        if(is_dir($include)) {

            recursiveRemoveDir($include);
        }

        else {

            unlink($include);
        }
    }

    rmdir($dir);
}


Не удаляется папка с файлом.

Это сообщение отредактировал(а) Pavl - 26.9.2020, 18:11
PM MAIL   Вверх
Oldshelf
Дата 26.9.2020, 20:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 22.4.2018

Репутация: нет
Всего: 4



Не нужно ничего менять в приведённой функции:

Код

function recursiveRemoveDir($dir) {
    $includes = glob($dir.'/*');

    foreach ($includes as $include) {
        if(is_dir($include)) {
            recursiveRemoveDir($include);
        }
        else {
            unlink($include);
        }
    }

    rmdir($dir);
}

$dir = 'C:/OSPanel/domains/test/www/uroki/';

if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if (is_dir($dir . $entry) && strtolower(substr($entry, 0, 5)) == 'pref_') {
            recursiveRemoveDir($dir . $entry);
        }
    }
    closedir($handle);
}

PM MAIL WWW   Вверх
Pavl
Дата 27.9.2020, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.9.2016

Репутация: нет
Всего: нет



Oldshelf, спасибо, всё работает!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1250 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.