Как автоматизировать переименование файлов в 1С-Битрикс. Разбор кода

В этой статье мы разберем, как с помощью PHP и 1С-Битрикс можно автоматизировать процесс переименования файлов в системе. Рассмотрим пример кода, который поможет вам переименовать файлы с пробелами в их именах, заменив пробелы на подчеркивания, а также обновить соответствующие данные в базе данных.

Как автоматизировать переименование файлов в 1С-Битрикс

Код:


    $rs = \Bitrix\Main\FileTable::getList([
        'filter' => ['MODULE_ID' => 'main', '%FILE_NAME' => ' '],
        'select' => ['ID', 'SUBDIR', 'FILE_NAME', 'DESCRIPTION'],
        'limit' => 10
    ]);

    $dir = $_SERVER['DOCUMENT_ROOT'].'/upload/';
    $connection = \Bitrix\Main\Application::getConnection();

    while($row = $rs->fetch()){
        $file = $dir.$row['SUBDIR'].'/'.$row['FILE_NAME'];
        if(file_exists($file)){
            $newFileName = str_replace(' ', '_', $row['FILE_NAME']);
            $toFile = $dir.$row['SUBDIR'].'/'.$newFileName;
            var_dump($row);
            var_dump(rename($file, $toFile));
            $connection->query('UPDATE b_file SET FILE_NAME = "'.$newFileName.'" WHERE ID = '.$row['ID']);
        }
    }
    

Что делает код и как работает:

  1. Получение данных из базы данных:

    
                $rs = \Bitrix\Main\FileTable::getList([
                    'filter' => ['MODULE_ID' => 'main', '%FILE_NAME' => ' '],
                    'select' => ['ID', 'SUBDIR', 'FILE_NAME', 'DESCRIPTION'],
                    'limit' => 10
                ]);
                

    Этот блок выполняет запрос к базе данных с использованием класса FileTable из пространства имен Bitrix\Main. Он ищет все файлы, у которых в имени есть пробел (условие %FILE_NAME => ' '). При этом результат ограничен первыми 10 записями, чтобы избежать излишней нагрузки на систему.

    • MODULE_ID — фильтр по модулю. В данном случае выбираются только те файлы, которые относятся к модулю main.
    • %FILE_NAME => ' ' — ищутся все файлы, чьи имена содержат пробел.
    • select — выбираются только нужные поля: ID, путь к подкаталогу (SUBDIR), имя файла (FILE_NAME) и описание (DESCRIPTION).
    • limit — ограничение на количество возвращаемых файлов (в данном случае 10).
  2. Настройка пути к директории:

    
                $dir = $_SERVER['DOCUMENT_ROOT'].'/upload/';
                

    Переменная $dir указывает на корневую директорию для загрузки файлов на сервере. Это место, где в 1С-Битрикс обычно хранятся все загруженные файлы — папка /upload/.

  3. Подключение к базе данных:

    
                $connection = \Bitrix\Main\Application::getConnection();
                

    Создается объект $connection, который используется для выполнения запросов к базе данных.

  4. Обработка каждого файла:

    
                while($row = $rs->fetch()){
                    $file = $dir.$row['SUBDIR'].'/'.$row['FILE_NAME'];
                    if(file_exists($file)){
                        $newFileName = str_replace(' ', '_', $row['FILE_NAME']);
                        $toFile = $dir.$row['SUBDIR'].'/'.$newFileName;
                        var_dump($row);
                        var_dump(rename($file, $toFile));
                        $connection->query('UPDATE b_file SET FILE_NAME = "'.$newFileName.'" WHERE ID = '.$row['ID']);
                    }
                }
                

    Этот блок выполняет обработку каждого файла, который был найден на предыдущем шаге:

    • $file = $dir.$row['SUBDIR'].'/'.$row['FILE_NAME']; — строится полный путь к файлу, используя директорию и имя файла.
    • file_exists($file) — проверяется, существует ли файл по указанному пути.
    • str_replace(' ', '_', $row['FILE_NAME']) — заменяются пробелы на подчеркивания в имени файла.
    • $toFile = $dir.$row['SUBDIR'].'/'.$newFileName; — создается новый путь с обновленным именем файла.
    • rename($file, $toFile) — переименовывает файл, если он существует.
    • $connection->query('UPDATE b_file SET FILE_NAME = "'.$newFileName.'" WHERE ID = '.$row['ID']); — обновляется имя файла в базе данных, чтобы отражать изменения.

    Используется var_dump для вывода отладочной информации, которая может быть полезной для отслеживания изменений.

Что важно помнить:

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

Заключение:

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

Теги:  рецепты, разбор кода

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

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

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

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

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

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

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

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