Битрикс. Файл init.php

29.05.2018

Теги: CMSinit.phpPHPWeb-разработкаБитрикс

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

Последовательность очереди подключения можно посмотреть в документации по Битрикс: первым идет подключение пролога, а затем init.php.

Если в системе несколько сайтов, то можно создать отдельную директорию для каждого сайта с индивидуальным init.php. Имя каждой директории совпадает с ID сайта. Первым подключается файл из директории bitix/php_interface, а потом — из bitix/php_interface/ID.

Кроме того, файл init.php может быть создан в директории local/php_interface или в директории local/php_interface/ID. Если такие файлы есть, они будут использованы вместо файлов в директории bitrix. Это директория как раз и нужна для того, чтобы ничего не менять в ядре Битрикс. Битрикс в первую очередь смотрит local и только если файлы не найдены, ищет их в bitrix.

Если файл init.php будет создан в директории bitrix/php_interface, то в случае ошибки в коде, весь сайт перестанет работать, в том числе и админка (т.е. через админку исправить ошибку не получится). Если файл будет создан в директории bitix/php_interface/ID, то в случае ошибки кода, сайт перестанет работать, но админку это не затронет, и через панель управления можно будет внести правки в init.php.

Если файл bitrix/php_interface/init.php содержит ошибки, получаем белый экран и текст:

При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php

Зайти в панель управления и иcправить ошибку теперь нельзя. Чтобы избежать такой ситуации, надо вынести содержимое файла init.php в отдельный файл и подключить его другим способом.

<?php
/*
 * Файл local/php_interface/init.php
 */
// session_start();
if (isset($_GET['noinit']) && $_GET['noinit'] === 'yes') {
    $_SESSION['work_without_init'] = 1;
}
if ( ! isset($_SESSION['work_without_init'])) {
    if (is_file($_SERVER['DOCUMENT_ROOT'].'/local/php_interface/init/script.php')) {
        // в этот файл вынесен весь код из файла init.php
        require_once $_SERVER['DOCUMENT_ROOT'].'/local/php_interface/init/script.php';
    }
}

В подключаемом файле допущена ошибка, нет ; после функции define():

<?php
/*
 * Файл local/php_interface/include/init.php
 */
define('DEFAULT_TEMPLATE_PATH', '/local/templates/.default')

Но, набрав в адресной строке

http://www.server.com/?noinit=yes

можно не подключать файл с ошибкой и получить доступ к панели управления. И уже в панели управления исправить ошибку.

Поиск: CMS • PHP • Web-разработка • init.php • Битрикс

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.