Внедрение PHP-файлов в проекты на 1С-Битрикс

Раздел: CMS -> Разработка на 1С-Битрикс

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

Основные способы включения файлов в Битрикс

Как включить файл с помощью штатной функции IncludeFile?

Самый распространённый метод - вызов \Bitrix\Main\Application::getInstance()->IncludeFile() или через объект $APPLICATION. Этот способ автоматически учитывает пути, поддерживает кэширование и может передавать переменные в подключаемый файл.


// Включение файла из корня сайта
$APPLICATION->IncludeFile("/include/header.php", Array("TITLE" => "Главная"));

Include php bitrix (включение файлов в 1с-битрикс)

Первый параметр - путь от корня сайта (с ведущим слешем). Второй - ассоциативный массив переменных, которые будут доступны внутри подключаемого файла. Файл выполняется в контексте вызвавшего скрипта.

Типичные ошибки:

  • Ошибка пути - если файл не найден, функция возвращает false и не прерывает выполнение. Нужно проверять результат.
  • Кэширование - IncludeFile может закэшировать вывод, если в настройках разрешено. Для отключения кэша передать третий параметр false.
  • Конфликт переменных - переменные из массива могут перезаписать глобальные. Рекомендуется использовать уникальные имена.

Как подключить файл относительно текущей директории?

Если файл находится рядом с текущим скриптом, удобно использовать __DIR__ или dirname(__FILE__). Это стандартный PHP-подход, который не зависит от ядра Битрикс.


// Подключение файла из той же папки
include __DIR__ . '/functions.php';
// или
require_once dirname(__FILE__) . '/config.php';

Такой способ подходит для изолированных модулей или компонентов, где файл гарантированно существует.

Как включить файл с проверкой существования?

Для защиты от ошибок можно использовать file_exists() или is_file() перед include.


$path = $_SERVER['DOCUMENT_ROOT'] . '/local/templates/.default/include/popup.php';
if (file_exists($path)) {
    include $path;
} else {
    // запись в лог или fallback
    \Bitrix\Main\Diag\Debug::writeToFile('Файл не найден: '.$path);
}

Такой подход часто применяется в шаблонах для подключения пользовательских блоков.

Как включить пролог и эпилог сайта?

В шаблонах сайта пролог подключается автоматически, но можно включить его принудительно через $APPLICATION->ShowHead() и $APPLICATION->ShowPanel(). Однако для полного пролога используется вызов:


require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
// код страницы
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_after.php');

Этот способ используется для создания простых PHP-скриптов, не являющихся компонентами Битрикс.

Как включить результат компонента как файл?

Результат работы компонента можно сохранить в переменную и обработать, но для включения кода другого компонента удобнее использовать $APPLICATION->IncludeComponent(). Она сама подключает шаблон и выполняет логику.


$APPLICATION->IncludeComponent("bitrix:news.list", "custom_list", array(
    "IBLOCK_ID" => 1,
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => 3600
));
Пример
<?
// Пример 1: Включение файла с буферизацией вывода
ob_start();
$APPLICATION->IncludeFile("/include/analytics.php", array("PAGE" => "main"));
$html = ob_get_clean();
// теперь можно обработать $html
?>
(вывод не отображается, сохранён в переменной)
Пример
<?
// Пример 2: Включение файла только для администраторов
global $USER;
if ($USER->IsAdmin()) {
    $APPLICATION->IncludeFile("/include/admin_only.php");
}
?>
(файл подключится только для админов)
Пример
<?
// Пример 3: Включение нескольких файлов по списку
$files = [
    '/include/header.php',
    '/include/menu.php',
    '/include/footer.php'
];
foreach ($files as $file) {
    if (file_exists($_SERVER['DOCUMENT_ROOT'] . $file)) {
        include $_SERVER['DOCUMENT_ROOT'] . $file;
    }
}
?>
(последовательно подключены файлы)
Пример
<?
// Пример 4: Включение файла с передачей параметров через глобальную переменную
$GLOBALS['custom_param'] = ['value1', 'value2'];
include $_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/custom_handler.php';
// в custom_handler.php можно получить $GLOBALS['custom_param']
?>
(параметры доступны через глобальную область)
Пример
<?
// Пример 5: Включение файла с использованием CFile::GetPath()
$fileId = 123;
$fileArray = \CFile::GetFileArray($fileId);
if ($fileArray) {
    $path = $_SERVER['DOCUMENT_ROOT'] . $fileArray['SRC'];
    if (file_exists($path)) {
        include $path; // подключает файл из медиабиблиотеки (небезопасно)
    }
}
?>
(подключает файл из медиабиблиотеки, если он PHP)
Пример
<?
// Пример 6: Включение через Bitrix\Main\IO\File с проверкой
use Bitrix\Main\IO\File;
$file = new File($_SERVER['DOCUMENT_ROOT'].'/include/config.php');
if ($file->isExists()) {
    $content = $file->getContents();
    eval('?>'.$content); // eval не рекомендуется, но иногда используется.
}
?>
(код файла выполняется через eval)

Включение файлов в 1С-Битрикс - comments

En
Include php bitrix (php)