В этой статье мы разберем, как с помощью 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 или в системах, которые не поддерживают пробелы в именах).