Усунення помилок на сайті 1С-Бітрікс
Повідомлення «На сайті сталася помилка» — це не діагноз, а симптом. За одинаковим зовнішнім проявленням криються десятки причин: від переповненої таблиці b_event до конфлікту оновлень модулів. Усунення помилок на Бітріксі — це перш за все методична діагностика, а потім уже виправлення. Розберемо системний підхід, який дозволяє знаходити причину, а не гадати.
Класифікація помилок
Перш ніж лізти в код, визначте тип помилки:
| Категорія | Ознаки | Де шукати причину |
|---|---|---|
| PHP Fatal/Parse | Білий екран або текст помилки | error_log, /bitrix/.settings.php → exception_handling |
| HTTP 500 | Сторінка помилки сервера | Лог веб-сервера, php-fpm лог |
| Помилки БД | «MySQL server has gone away», пусті списки | b_event_log, slow query log |
| JavaScript | Не працюють інтерактивні елементи | Консоль браузера, Network-таб |
| Логічні | Невірні ціни, зниклі товари | Логіка компонентів, кеш |
Перший крок: включення детального логування
За замовчуванням Бітрікс подавляє вивід помилок на продакшені. Для діагностики потрібно тимчасово включити розширений режим.
У файлі /bitrix/.settings.php знайдіть секцію exception_handling та встановіть:
-
debug→true -
handled_errors_types→E_ALL -
log→ налаштуйте запис у файл, наприклад/var/log/bitrix/error.log
Альтернативний спосіб — через dbconn.php (для старих версій): $DBDebug = true; та error_reporting(E_ALL);. На продакшені не забудьте повернути налаштування після діагностики — вивід помилок розкриває шляхи та структуру БД.
Системний підхід до діагностики
Є устоявлений алгоритм, який покриває 90% випадків:
1. Відтворіть помилку. Якщо помилка плаваюча — зберіть дані: URL, час, браузер, авторизован ли користувач. Часто помилка проявляється тільки для певної групи користувачів або при певних налаштуваннях компонента.
2. Перевірте журнал подій. Адміністративна панель → Налаштування → Інструменти → Журнал подій. Таблиця b_event_log зберігає помилки з мітками часу, модулем-джерелом та stack trace. Фільтруйте по severity ERROR та WARNING.
3. Виключіть проблему кеша. Скиньте весь кеш: керований кеш (/bitrix/managed_cache/), автокеш (/bitrix/cache/), статичний кеш (/bitrix/html_pages/). Через адмінку: Налаштування → Налаштування продукту → Автокешування → Очистити всі файли кеша. Якщо помилка зникла після скидання — проблема у кеш'ованих даних, а не в коді.
4. Вимкніть сторонні модулі. Через bitrix/modules/ перейменуйте підозрілий модуль (наприклад, partner.module → partner.module_disabled). Якщо помилка пропала — винуватець знайдений. Для компонентів аналогічно: замініть виклик компонента заглушкою.
5. Перевірте цілісність ядра. Інструмент «Перевірка системи» в адмінці (/bitrix/admin/site_checker.php) порівнює контрольні суми файлів ядра з еталонними. Змінені файли ядра — часта причина проблем після оновлень.
Часті причини помилок та їх усунення
Переповнення таблиць служебних даних. Таблиці b_event, b_event_log, b_search_content_stem, b_stat_* зростають без обмежень. На навантажених сайтах b_event може містити мільйони рядків. Рішення: налаштувати агент очистки або написати cron-скрипт для ротації. Для b_event — налаштувати ліміт у Налаштування → Поштові події.
Конфлікт оновлень модулів. Оновлення ядра до версії, несумісної зі сторонім модулем, викликає Fatal Error. Паттерн: оновили Бітрікс, все зламалось. Рішення: откатити оновлення через /bitrix/updates/ або вимкнути конфліктуючий модуль. Перед оновленнями завжди робіть бекап та перевіряйте сумісність на тестовій копії.
Помилки в result_modifier.php та component_epilog.php. Кастомізації компонентів через ці файли в шаблонах — основний джерело помилок при оновленнях. Компонент змінив формат $arResult, а result_modifier.php звертається до неіснуючого ключа. Рішення: додавайте перевірки isset() та логуйте розбіжності.
Проблеми з сесіями. Бітрікс за замовчуванням зберігає сесії в файлах (/tmp/ або /bitrix/tmp/). При недостатку прав або місця сесії не створюються, користувач отримує нескінченний редирект на сторінку авторизації. Перевіряйте session.save_path у phpinfo() та права на директорію.
Помилки на рівні БД
Найкоротиші — помилки, пов'язані з цілісністю даних. Типові:
-
«Duplicate entry» при додаванні елементів інфоблока — порушений автоінкремент або індекс. Рішення:
ALTER TABLE ... AUTO_INCREMENT = <max_id + 1>. -
«Table is marked as crashed» (MyISAM) — пошкодження таблиці. Рішення:
REPAIR TABLE b_iblock_element. -
Deadlocks при масових операціях — дві транзакції блокують одна одну. Проявляється як «Lock wait timeout exceeded». Рішення: оптимізація порядку звертань до таблиць, використання
SHOW ENGINE INNODB STATUSдля аналізу.
Строки усунення за складністю
| Тип помилки | Типовий час |
|---|---|
| Проблема кеша, прав доступу | 1-2 години |
| Конфлікт модулів, помилка в шаблоні | 2-8 годин |
| Проблеми БД, цілісність даних | 1-3 дні |
| Архітектурні проблеми (утічки пам'яти, race conditions) | 3-10 днів |
Для кожної знайденої помилки фіксуйте: причину, спосіб виявлення, рішення та заходи запобігання. Без цього одна й та ж помилка буде повертатися після кожного оновлення.







