В процессе разработки сайтов на платформе 1С-Битрикс часто возникает необходимость работать с файлами: читать их, записывать новые данные, изменять или перезаписывать содержимое. Одной из таких функций является RewriteFile()
, которая позволяет перезаписывать содержимое файлов на сервере.

В этой статье мы подробно рассмотрим работу функции RewriteFile()
, а также разберем примеры использования и внутреннюю реализацию.
Описание функции RewriteFile
Функция RewriteFile()
используется для записи новых данных в существующий файл на сервере. Она перезаписывает файл с указанным абсолютным путем на новый контент, переданный в параметре content
.
Параметры функции
- abs_path (string): Абсолютный путь к файлу, который необходимо перезаписать. Это должен быть полный путь на сервере, начиная от корневой директории.
- content (string): Новое содержимое файла, которое будет записано в файл по указанному пути.
Функция возвращает:
- true в случае успешной записи данных в файл.
- false в случае ошибки записи (например, если файл не существует или недостаточно прав для записи).
Примечания
- Если в абсолютном пути указан файл в несуществующих директориях, функция
RewriteFile()
создаст недостающие каталоги автоматически. - Аналог этой функции в новом ядре D7:
Bitrix\Main\IO\File::putFileContents
. Этот метод выполняет ту же задачу, но является частью более современного API, используемого в новых версиях Битрикс.
Пример использования RewriteFile
Простой пример перезаписи файла
Рассмотрим пример, где мы перезапишем файл index.php
, расположенный в каталоге /ru/
на сервере.
<?php
// Новый контент для файла
$content = '
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Заголовок страницы");
?>
<h1>Добро пожаловать на сайт!</h1>
<p>Это тестовая страница, созданная автоматически с помощью Bitrix.</p>
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>
';
// Путь к файлу
$filePath = $_SERVER["DOCUMENT_ROOT"]."/ru/index.php";
// Перезапишем файл
RewriteFile($filePath, $content);
?>
Этот код создает новый файл index.php
в каталоге /ru/
(если каталог не существует, он будет создан автоматически) и записывает туда новый контент. После выполнения этого кода, файл будет содержать HTML-разметку с заголовком и приветственным текстом.
Пример с использованием проверок прав
В реальной ситуации, важно проверять права на запись перед тем, как перезаписать файл. Функция RewriteFile()
сама управляет правами доступа, но иногда полезно явно убедиться, что у вас есть права на запись.
<?php
$filePath = $_SERVER["DOCUMENT_ROOT"]."/ru/index.php";
$content = '<p>Новый контент страницы.</p>';
// Проверим, существует ли файл и есть ли права на запись
if (file_exists($filePath) && is_writable($filePath)) {
// Перезапишем файл
if (RewriteFile($filePath, $content)) {
echo "Файл успешно перезаписан!";
} else {
echo "Не удалось перезаписать файл.";
}
} else {
echo "Файл не существует или недостаточно прав для записи.";
}
?>
Этот пример сначала проверяет, существует ли файл и можно ли в него записывать, прежде чем пытаться перезаписать содержимое.
Автоматическое создание директорий
Если в абсолютном пути к файлу указаны несуществующие директории, функция RewriteFile()
автоматически их создаст. Рассмотрим пример:
<?php
$filePath = $_SERVER["DOCUMENT_ROOT"]."/new_folder/subfolder/index.php";
$content = '<p> новой папке.</p>';
// Функция перезапишет файл, а если каталог /new_folder/subfolder не существует — создаст его
RewriteFile($filePath, $content);
?>
Если каталоги /new_folder/
и /subfolder/
еще не существуют, то они будут автоматически созданы, и в файл index.php
будет записано новое содержимое.
Внутреннее устройство функции
Теперь давайте рассмотрим, как работает сама функция RewriteFile()
. Исходный код функции из файла bitrix/modules/main/tools.php
выглядит так:
function RewriteFile($abs_path, $strContent)
{
// Проверка на существование каталога
CheckDirPath($abs_path);
// Если файл существует и не доступен для записи, изменяем права
if (file_exists($abs_path) && !is_writable($abs_path)) {
@chmod($abs_path, BX_FILE_PERMISSIONS);
}
// Открываем файл для записи (перезапись)
$fd = fopen($abs_path, "wb");
// Пишем содержимое в файл
if (!fwrite($fd, $strContent)) {
return false;
}
// Устанавливаем права на файл
@chmod($abs_path, BX_FILE_PERMISSIONS);
// Закрываем файл
fclose($fd);
return true;
}
Разбор кода:
- CheckDirPath($abs_path): Эта функция проверяет, существует ли каталог, указанный в пути. Если каталог отсутствует, он будет создан.
- fopen($abs_path, "wb"): Файл открывается в режиме записи с перезаписью содержимого. Если файл не существует, он будет создан.
- fwrite($fd, $strContent): Запись данных в файл. Если запись прошла успешно, функция возвращает
true
. В противном случае —false
. - chmod($abs_path, BX_FILE_PERMISSIONS): После записи содержимого, функция устанавливает права на файл, чтобы предотвратить проблемы с доступом.
- fclose($fd): Закрытие файла.
Переход на новый стандарт: Bitrix\Main\IO\File::putFileContents
С развитием Битрикса и переходом к новому ядру D7 была введена новая альтернатива функции RewriteFile()
— Bitrix\Main\IO\File::putFileContents()
. Эта функция является более гибкой и ориентирована на работу с файлами в новом API.
Пример использования нового метода:
<?php
use Bitrix\Main\IO\File;
// Путь к файлу
$filePath = $_SERVER["DOCUMENT_ROOT"]."/ru/index.php";
$content = '<p>Новый контент страницы с использованием D7.</p>';
// Записываем новый контент в файл
$result = File::putFileContents($filePath, $content);
if ($result) {
echo "Файл успешно перезаписан!";
} else {
echo "Не удалось перезаписать файл.";
}
?>
Этот метод работает аналогично старой функции, но интегрирован с новой системой работы с файлами и каталогами в Битрикс.
Заключение
Функция RewriteFile()
является инструментом для работы с файловой системой в 1С-Битрикс. Она позволяет эффективно перезаписывать файлы, создавая необходимые каталоги автоматически, и управлять правами доступа. Несмотря на наличие аналогов в новом ядре D7, функция RewriteFile()
остается актуальной для многих разработчиков, работающих с Битрикс.
Надеемся, что этот материал был полезен для вас и помог лучше понять, как работать с файлами в Битрикс.