Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Битрикс Битрикс
01.11.2021

Битрикс. Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут

Битрикс. Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут

При обмене 1С с 1С-Битрикс иногда возникает ошибка:

Авторизация не выполнена.
Не удалось установить соединение с сервером.
Проверьте имя пользователя и пароль.
Ответ сервера: failure

Время на сервере базы данных отличается от времени на веб-сервере больше чем на 10 минут.
Вероятно неправильно настроены временные зоны.
Выполните настройку и повторите обмен.

На первый взгляд кажется, что проблема связана с авторизацией 1С, логином или паролем.

Но на самом деле ошибка возникает из-за неправильной настройки временной зоны на сервере.

Почему появляется ошибка

При обмене данными Битрикс проверяет:

  • время PHP;
  • время базы данных;
  • разницу между сервером и 1С.

Если время отличается более чем на 10 минут, обмен блокируется.

Что нужно проверить

Проверяем:

  • часовой пояс PHP;
  • часовой пояс MySQL;
  • системное время Linux;
  • таймзону Bitrix.

1. Определяем правильный часовой пояс

Список поддерживаемых timezone:

http://php.net/manual/en/timezones.php

Например, для Москвы:

Europe/Moscow

2. Настраиваем timezone для PHP

Открываем файл:

/bitrix/php_interface/dbconn.php

И добавляем строку:

date_default_timezone_set("Europe/Moscow");

Что делает date_default_timezone_set

Эта функция:

  • устанавливает временную зону для PHP;
  • синхронизирует работу функций даты и времени;
  • устраняет конфликт времени при обмене.

3. Настраиваем timezone для базы данных

Открываем файл:

/bitrix/php_interface/after_connect_d7.php

И добавляем:

$connection->queryExecute(
    'SET LOCAL time_zone="'.date('P').'"'
);

Что делает after_connect_d7.php

Этот файл выполняется:

  • после подключения к базе данных;
  • на каждом запросе Bitrix.

В данном случае:

  • MySQL получает текущую timezone PHP;
  • время базы синхронизируется с веб-сервером.

Дополнительно проверьте системное время Linux

На сервере Linux желательно проверить:

timedatectl

Или:

date

Настройка timezone в Linux

Для установки временной зоны:

timedatectl set-timezone Europe/Moscow

Перезапуск PHP

После изменения timezone желательно перезапустить:

  • php-fpm;
  • Apache;
  • Nginx + PHP-FPM.

Например:

systemctl restart php8.2-fpm

Как проверить что проблема решена

После настройки:

  • повторно запускаем обмен с 1С;
  • ошибка времени исчезает;
  • авторизация проходит успешно.

На что еще обратить внимание

Если ошибка осталась, дополнительно проверьте:

  • время на сервере 1С;
  • NTP-синхронизацию;
  • UTC offset;
  • timezone MySQL;
  • разницу времени Docker-контейнеров.

Итог

Ошибка:

Время на сервере базы данных отличается от времени на веб-сервере

чаще всего связана с неправильной настройкой timezone в PHP или MySQL.

После синхронизации времени обмен 1С с Битрикс начинает работать корректно.

24 просмотров

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться