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

Описание функции
Сигнатура функции:
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;
}
Пояснение работы функции:
- Проверка пути: Если путь пустой или равен корневой директории (
/
), функция возвращаетfalse
. - Построение полного пути: Функция создает полный путь к удаляемому файлу или каталогу, объединяя корень сайта (
DOCUMENT_ROOT
) с указанным путем. - Удаление файлов: Если указанный путь — файл или ссылка, вызывается
unlink()
для удаления. - Удаление каталогов: Если путь — каталог, то функция рекурсивно удаляет все файлы и подкаталоги, используя
opendir()
,readdir()
иrmdir()
. - Возвращаемое значение: Функция возвращает
true
, если все операции прошли успешно, иfalse
, если произошла ошибка.
Заключение
Функция DeleteDirFilesEx()
является мощным инструментом для работы с файловой системой в 1С-Битрикс. Она позволяет рекурсивно удалять каталоги и файлы, включая вложенные подкаталоги. Несмотря на свою простоту, эта функция может быть опасной, если используется без должной осторожности, так как она удаляет данные без возможности восстановления.