Функции для работы с файловой системой сайта в Битриксе: DeleteDirFilesEx()

Функция DeleteDirFilesEx() в 1С-Битрикс позволяет удалять каталоги и файлы, включая все вложенные папки и их содержимое. Эта функция полезна в случаях, когда нужно очистить пространство на сервере или удалить временные данные. В этой статье мы рассмотрим подробное описание функции, ее параметры и примеры использования.

Функции для работы с файловой системой сайта в Битриксе: DeleteDirFilesEx()

Описание функции

Сигнатура функции:

bool DeleteDirFilesEx(string $path);

Параметры:

  • $path (string) — путь к каталогу или файлу, который необходимо удалить. Путь должен быть указан относительно корня сайта. Например, /temp1/ или /files/uploads/.

Возвращаемое значение:

  • true — если каталог или файл успешно удален.
  • false — если произошла ошибка, например, файл или каталог не существует или не удается удалить.

Общее описание:

Функция рекурсивно удаляет указанный каталог вместе с его содержимым (файлы и подкаталоги). Она удаляет файлы с помощью unlink(), а каталоги — с помощью rmdir(). Если каталог содержит подкаталоги или файлы, функция сначала удаляет их, а затем сам каталог.

Важное замечание:

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

Аналог в новом ядре:

В новом ядре 1С-Битрикс функция DeleteDirFilesEx имеет аналог — Bitrix\Main\IO\Directory::deleteDirectory. Эта функция предоставляет схожий функционал, но является частью нового API.

Примеры использования функции DeleteDirFilesEx

1. Удаление одного каталога и его содержимого:

// Удаляем каталог /temp1/ и все его содержимое
DeleteDirFilesEx("/temp1");

2. Удаление каталога с вложенными подкаталогами:

// Удаляем каталог /uploads/ и все файлы и папки внутри него
DeleteDirFilesEx("/uploads");

3. Удаление временного каталога:

// Удаляем временный каталог /temp_data/ с его содержимым
DeleteDirFilesEx("/temp_data");

4. Удаление каталога с логами:

// Удаляем каталог /logs/ и все файлы внутри него
DeleteDirFilesEx("/logs");

5. Удаление каталога с изображениями:

// Удаляем каталог /images/ и все его содержимое
DeleteDirFilesEx("/images");

Эти примеры демонстрируют, как эффективно использовать функцию DeleteDirFilesEx() для рекурсивного удаления файлов и каталогов на вашем сайте.

Исходный код функции DeleteDirFilesEx

Функция DeleteDirFilesEx() реализована в файле /bitrix/modules/main/tools.php и выглядит следующим образом:

function DeleteDirFilesEx($path, $root = null)
{
    if ($path == '' || $path == '/') {
        return false;
    }

    if ($root === null) {
        $root = $_SERVER["DOCUMENT_ROOT"];
    }

    $full_path = $root . "/" . $path;
    $full_path = preg_replace("#[\\\\\\/]+#", "/", $full_path);

    $f = true;
    if (is_file($full_path) || is_link($full_path)) {
        if (@unlink($full_path)) {
            return true;
        }
        return false;
    } elseif (is_dir($full_path)) {
        if ($handle = opendir($full_path)) {
            while (($file = readdir($handle)) !== false) {
                if ($file == "." || $file == "..") {
                    continue;
                }

                if (!DeleteDirFilesEx($path . "/" . $file, $root)) {
                    $f = false;
                }
            }
            closedir($handle);
        }
        if (!@rmdir($full_path)) {
            return false;
        }
        return $f;
    }
    return false;
}

Пояснение работы функции:

  1. Проверка пути: Если путь пустой или равен корневой директории (/), функция возвращает false.
  2. Построение полного пути: Функция создает полный путь к удаляемому файлу или каталогу, объединяя корень сайта (DOCUMENT_ROOT) с указанным путем.
  3. Удаление файлов: Если указанный путь — файл или ссылка, вызывается unlink() для удаления.
  4. Удаление каталогов: Если путь — каталог, то функция рекурсивно удаляет все файлы и подкаталоги, используя opendir(), readdir() и rmdir().
  5. Возвращаемое значение: Функция возвращает true, если все операции прошли успешно, и false, если произошла ошибка.

Заключение

Функция DeleteDirFilesEx() является мощным инструментом для работы с файловой системой в 1С-Битрикс. Она позволяет рекурсивно удалять каталоги и файлы, включая вложенные подкаталоги. Несмотря на свою простоту, эта функция может быть опасной, если используется без должной осторожности, так как она удаляет данные без возможности восстановления.


Теги:  DeleteDirFilesEx, удаление файлов, удаление каталогов, файловая система

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора