В этой статье рассмотрим подробное описание функции CopyDirFiles
, предназначенной для копирования файлов и каталогов в системе 1С-Битрикс. Мы обсудим, как правильно использовать её параметры и приведем примеры копирования различных типов файлов и директорий.

Описание функции
Функция CopyDirFiles
выполняет копирование файлов и каталогов с одного места в другое. Она может работать как с одиночными файлами, так и с целыми папками, включая их содержимое. Функция возвращает true
при успешном завершении копирования и false
в случае ошибки.
Синтаксис
bool CopyDirFiles(
string $path_from, // Абсолютный путь к исходному файлу или каталогу
string $path_to, // Абсолютный путь к целевому каталогу или файлу
bool $rewrite = true, // Перезаписывать ли существующие файлы
bool $recursive = false, // Копировать ли файлы рекурсивно
bool $DeleteAfterCopy = false, // Удалить ли исходный файл/каталог после копирования
string $exclude = "" // Исключить файлы/каталоги по шаблону
);
bool CopyDirFiles(
string $path_from, // Абсолютный путь к исходному файлу или каталогу
string $path_to, // Абсолютный путь к целевому каталогу или файлу
bool $rewrite = true, // Перезаписывать ли существующие файлы
bool $recursive = false, // Копировать ли файлы рекурсивно
bool $DeleteAfterCopy = false, // Удалить ли исходный файл/каталог после копирования
string $exclude = "" // Исключить файлы/каталоги по шаблону
);
Параметры:
- $path_from: Абсолютный путь к файлу или каталогу, который нужно скопировать.
- $path_to: Абсолютный путь к каталогу, в который будут скопированы файлы.
- $rewrite: Флаг, указывающий, перезаписывать ли существующие файлы в целевом каталоге (по умолчанию —
true
). - $recursive: Флаг, указывающий, копировать ли файлы и подкаталоги рекурсивно (по умолчанию —
false
). - $DeleteAfterCopy: Флаг, указывающий, удалить ли исходный файл или каталог после успешного копирования (по умолчанию —
false
). - $exclude: Строка для исключения файлов или каталогов с определенным именем или шаблоном (по умолчанию — пусто).
Примеры использования
Теперь рассмотрим несколько примеров использования функции CopyDirFiles
для разных сценариев.
Пример 1. Копирование одного файла
- Копирование файла без изменения имени:
// Копируем файл file1.txt из temp1 в temp2 с сохранением имени CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/file1.txt", $_SERVER["DOCUMENT_ROOT"] . "/temp2/file1.txt" );
- Копирование файла с изменением имени:
// Копируем файл file1.txt из temp1 в temp2 и переименовываем его в new_file1.txt CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/file1.txt", $_SERVER["DOCUMENT_ROOT"] . "/temp2/new_file1.txt" );
- Перезапись существующего файла:
// Копируем файл file2.txt из temp1 в temp2, перезаписывая существующий файл CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/file2.txt", $_SERVER["DOCUMENT_ROOT"] . "/temp2/file2.txt", true // Перезапись );
- Копирование файла и удаление оригинала:
// Копируем файл file3.txt из temp1 в temp2 и удаляем оригинал после копирования CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/file3.txt", $_SERVER["DOCUMENT_ROOT"] . "/temp2/file3.txt", true, // Перезапись false, // Не рекурсивно true // Удалить после копирования );
Пример 2. Копирование директорий
- Копирование всех файлов из одной директории в другую:
// Копируем все содержимое директории temp1 в temp2 CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/", $_SERVER["DOCUMENT_ROOT"] . "/temp2/", true, // Перезапись true // Рекурсивно );
- Копирование директории без перезаписи существующих файлов:
// Копируем все содержимое директории temp1 в temp2 без перезаписи существующих файлов CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/", $_SERVER["DOCUMENT_ROOT"] . "/temp2/", false, // Не перезаписывать true // Рекурсивно );
- Копирование директории с исключением определенных файлов:
// Копируем содержимое temp1 в temp2, исключая файл exclude.txt CopyDirFiles( $_SERVER["DOCUMENT_ROOT"] . "/temp1/", $_SERVER["DOCUMENT_ROOT"] . "/temp2/", true, // Перезапись true, // Рекурсивно false, // Не удалять после копирования "exclude.txt" // Исключаем файл );
- Копирование директорий с добавлением префикса к именам файлов:
// Копируем директорию temp1 в temp2, добавляя префикс "prefix_" к именам файлов $sourceDir = $_SERVER["DOCUMENT_ROOT"] . "/temp1/"; $destDir = $_SERVER["DOCUMENT_ROOT"] . "/temp2/"; $files = scandir($sourceDir); foreach ($files as $file) { if ($file !== "." && $file !== "..") { CopyDirFiles( $sourceDir . $file, $destDir . "prefix_" . $file // Добавляем префикс ); } }
Пример 3. Применение функции в реальных условиях
// Копируем файлы из каталога /temp1/ в каталог /temp2/ с перезаписью и рекурсивно
CopyDirFiles(
$_SERVER["DOCUMENT_ROOT"] . "/temp1/",
$_SERVER["DOCUMENT_ROOT"] . "/temp2/",
true, // Перезапись
true, // Рекурсивно
false, // Не удалять после копирования
"exclude.txt" // Исключить файл exclude.txt
);
Важные моменты:
- Функция проверяет, что путь назначения не является подкаталогом исходного пути, чтобы избежать зацикливания.
- Если путь назначения является файлом, то перед копированием проверяется существование файла и флаг перезаписи.
- При рекурсивном копировании подкаталогов также будут проверяться исключения и соответствующие действия с ними.
- Необходимо соблюдать осторожность при использовании параметра
$DeleteAfterCopy
, так как это может привести к потере данных, если копирование не было выполнено корректно.
Заключение
Функция CopyDirFiles
— это мощный инструмент для копирования файлов и директорий в 1С-Битрикс. Она позволяет гибко настраивать поведение при копировании, включая рекурсию, перезапись, исключение файлов и удаление оригиналов после копирования. Надеемся, что примеры в статье помогут вам эффективно использовать эту функцию в ваших проектах.