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

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

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

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

Функция CopyDirFiles выполняет копирование файлов и каталогов с одного места в другое. Она может работать как с одиночными файлами, так и с целыми папками, включая их содержимое. Функция возвращает true при успешном завершении копирования и false в случае ошибки.

Синтаксис

bool CopyDirFiles(
    string $path_from,       // Абсолютный путь к исходному файлу или каталогу
    string $path_to,         // Абсолютный путь к целевому каталогу или файлу
    bool $rewrite = true,    // Перезаписывать ли существующие файлы
    bool $recursive = false, // Копировать ли файлы рекурсивно
    bool $DeleteAfterCopy = false, // Удалить ли исходный файл/каталог после копирования
    string $exclude = ""     // Исключить файлы/каталоги по шаблону
);

Параметры:

  1. $path_from: Абсолютный путь к файлу или каталогу, который нужно скопировать.
  2. $path_to: Абсолютный путь к каталогу, в который будут скопированы файлы.
  3. $rewrite: Флаг, указывающий, перезаписывать ли существующие файлы в целевом каталоге (по умолчанию — true).
  4. $recursive: Флаг, указывающий, копировать ли файлы и подкаталоги рекурсивно (по умолчанию — false).
  5. $DeleteAfterCopy: Флаг, указывающий, удалить ли исходный файл или каталог после успешного копирования (по умолчанию — false).
  6. $exclude: Строка для исключения файлов или каталогов с определенным именем или шаблоном (по умолчанию — пусто).

Примеры использования

Теперь рассмотрим несколько примеров использования функции CopyDirFiles для разных сценариев.

Пример 1. Копирование одного файла

  1. Копирование файла без изменения имени:
    // Копируем файл file1.txt из temp1 в temp2 с сохранением имени
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/file1.txt",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/file1.txt"
    );
  2. Копирование файла с изменением имени:
    // Копируем файл file1.txt из temp1 в temp2 и переименовываем его в new_file1.txt
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/file1.txt",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/new_file1.txt"
    );
  3. Перезапись существующего файла:
    // Копируем файл file2.txt из temp1 в temp2, перезаписывая существующий файл
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/file2.txt",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/file2.txt",
        true // Перезапись
    );
  4. Копирование файла и удаление оригинала:
    // Копируем файл file3.txt из temp1 в temp2 и удаляем оригинал после копирования
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/file3.txt",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/file3.txt",
        true,  // Перезапись
        false, // Не рекурсивно
        true   // Удалить после копирования
    );

Пример 2. Копирование директорий

  1. Копирование всех файлов из одной директории в другую:
    // Копируем все содержимое директории temp1 в temp2
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/",
        true,  // Перезапись
        true   // Рекурсивно
    );
  2. Копирование директории без перезаписи существующих файлов:
    // Копируем все содержимое директории temp1 в temp2 без перезаписи существующих файлов
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/",
        false, // Не перезаписывать
        true   // Рекурсивно
    );
  3. Копирование директории с исключением определенных файлов:
    // Копируем содержимое temp1 в temp2, исключая файл exclude.txt
    CopyDirFiles(
        $_SERVER["DOCUMENT_ROOT"] . "/temp1/",
        $_SERVER["DOCUMENT_ROOT"] . "/temp2/",
        true,  // Перезапись
        true,  // Рекурсивно
        false, // Не удалять после копирования
        "exclude.txt" // Исключаем файл
    );
  4. Копирование директорий с добавлением префикса к именам файлов:
    // Копируем директорию 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
);

Важные моменты:

  1. Функция проверяет, что путь назначения не является подкаталогом исходного пути, чтобы избежать зацикливания.
  2. Если путь назначения является файлом, то перед копированием проверяется существование файла и флаг перезаписи.
  3. При рекурсивном копировании подкаталогов также будут проверяться исключения и соответствующие действия с ними.
  4. Необходимо соблюдать осторожность при использовании параметра $DeleteAfterCopy, так как это может привести к потере данных, если копирование не было выполнено корректно.

Заключение

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

Теги:  CopyDirFiles, Битрикс, копирование файлов, файловая система

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

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.

Аутсорсинг

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

договорная

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

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

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

от 7 дней

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

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