В этой статье мы разберем, как с помощью PHP и 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']);
}
}
Что делает код и как работает:
-
Получение данных из базы данных:
$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).
-
Настройка пути к директории:
$dir = $_SERVER['DOCUMENT_ROOT'].'/upload/';
Переменная
$dir
указывает на корневую директорию для загрузки файлов на сервере. Это место, где в 1С-Битрикс обычно хранятся все загруженные файлы — папка/upload/
. -
Подключение к базе данных:
$connection = \Bitrix\Main\Application::getConnection();
Создается объект
$connection
, который используется для выполнения запросов к базе данных. -
Обработка каждого файла:
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 или в системах, которые не поддерживают пробелы в именах).