День добрый.
не работала интеграция "Комплексная автоматизация 2.2 -> Битрикс" с сообщением "не удалось установить соединение", прошарил все ответы в форумах и советы, ничего не помогло, пришлось расследовать через php-лог (error_log), то есть делал вставки в коде, смотрел инфу.
Обнаружилась еще одна причина, по которой это может происходить, но при этом также обнаружился непонятный код.
Собственно бывают сценарии, когда время php отличается от времени mysql, то есть они живут на одной машине, но php имеет настройку на Moscow и считает правильно, а mysql имеет настройку SYSTEM, берет у bsd, которая по каким-то древним причинам на час больше считает.
При этом все упирается в вызов checkDatabaseServerTime, которая вроде бы как должна проверять возможность импорта через существование живого пользователя за последние 600 секунд (вызов в /bitrix/components/bitrix/catalog.import.1c/component.php , а код функции в class.php), но реальный sql, который срабатывает не содержит данных из таблицы совсем
sel ect DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s') DB_TIME fr om b_user
... а берет текущую дату и просто число строк с текущей датой соответствует числу пользователей в таблице. То есть по нынешней логике, если машина правильно по времени настроена, эта функция всегда возвращает true, потому что разница всегда будет 0. Соответственно, на машине с рассинхроном времени php и mysql она всегда возвращает больше часа, то есть больше требуемых 600 секунд (всегда false)
Поэтому предложение разработчикам проверить эту функцию на предмет ее целей и задач (если конечно по каким-то причинам у нас не оказалась какая-то старая версия компонента)
Спасибо
не работала интеграция "Комплексная автоматизация 2.2 -> Битрикс" с сообщением "не удалось установить соединение", прошарил все ответы в форумах и советы, ничего не помогло, пришлось расследовать через php-лог (error_log), то есть делал вставки в коде, смотрел инфу.
Обнаружилась еще одна причина, по которой это может происходить, но при этом также обнаружился непонятный код.
Собственно бывают сценарии, когда время php отличается от времени mysql, то есть они живут на одной машине, но php имеет настройку на Moscow и считает правильно, а mysql имеет настройку SYSTEM, берет у bsd, которая по каким-то древним причинам на час больше считает.
При этом все упирается в вызов checkDatabaseServerTime, которая вроде бы как должна проверять возможность импорта через существование живого пользователя за последние 600 секунд (вызов в /bitrix/components/bitrix/catalog.import.1c/component.php , а код функции в class.php), но реальный sql, который срабатывает не содержит данных из таблицы совсем
sel ect DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s') DB_TIME fr om b_user
... а берет текущую дату и просто число строк с текущей датой соответствует числу пользователей в таблице. То есть по нынешней логике, если машина правильно по времени настроена, эта функция всегда возвращает true, потому что разница всегда будет 0. Соответственно, на машине с рассинхроном времени php и mysql она всегда возвращает больше часа, то есть больше требуемых 600 секунд (всегда false)
Поэтому предложение разработчикам проверить эту функцию на предмет ее целей и задач (если конечно по каким-то причинам у нас не оказалась какая-то старая версия компонента)
Спасибо