blank

Контакты
для связи

крестик

Нажимая на кнопку, вы даете согласие на отправку и обработку своих персональных данных

крестик Конверт

Спасибо за обращение!

Менеджер свяжется с вами в ближайшее время

Заявка на техническую поддержку

крестик

Нажимая на кнопку, вы даете согласие на отправку и обработку своих персональных данных

Назад

Обновление до PHP 8 и 1С-Битрикс, проблемы и ошибки

картинка

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

С февраля мы успешно обновили десятки веб-серверов до PHP 8.x, а в этом кейсе разберем наиболее популярные проблемы, с которыми столкнулись в процессе.

Требуется обновить веб-сервер? Обращайтесь!

Напишите или позвоните — мы поможем. Уточним задачи и на их основе предложим варианты

Сторонние модули

Как показала практика, большинство трудностей возникает, когда на сайте используются сторонние модули: именно они генерируют больше всего ошибок, которые необходимо исправить до обновления на PHP 8.x.
Если это не сделать, есть риск падения как всего сайта, так и отдельных его страниц, использующих тот или иной модуль.

Примеры ошибок и их исправление

  • 1. Ошибка с использованием count(), наиболее часто встречается в условных операторах:
    count(): Argument #1 ($value) must be of type Countable|array, int given
    Причина: вместо массива был передан int. В нашем случае это просто означает, что значение не является исчисляемым функцией count.
    Как исправить: добавить проверку типа.
    Например, для массива:
    if( is_array($arr) ){}
  • 2. Ошибка с использованием фигурных скобок для ключа массива:
    if( $arr{1} ){}
    Причина: данная нотация более не является допустимой и считается ошибкой с выхода php8.
    Как исправить: меняем скобки на квадратные для ключа таким образом:
    if( $arr[1] ){}
  • 3. Использование ключа массива без кавычек, например так, if( $arr[TEST] ){} приведет к ошибке:
    Undefined constant "TEST" (0)
    Причина: данная нотация также более недопустима.
    Как исправить: используем кавычки
    if( $arr["TEST"] ){}
  • 4. Ошибка со статическими функциями:
    call_user_func_array(): Argument #1 ($function) must be a valid callback, non-static method НазваниеМодуля::МетодКласса() cannot be called statically (0)
    Причина: обращение как к статическому методу, который таковым не является.
    Как исправить: задать static перед функцией, сделав ее статической, если вам это необходимо, например:
    static function МетодКласса().

Устаревшие нотации в функциях

Другой важный момент — устаревшие нотации в функциях внутри init.php, что сразу приведет к падению сайта после обновления, если не исправить. Осложняется ситуация тем, что если сторонние модули можно удалить или обновить (если разработчики их все еще поддерживают), то эти ошибки придется исправлять или отказываться от части важного функционала на сайте.

В большинстве случаев проблемы связаны с более строгим определением «warning» или «error», так, например, стало критичным определение функции как статической с помощью «static» и ключей массива, которые теперь не могут быть указаны в фигурных скобках, как это допускалось ранее. Подобные ошибки исправляются довольно быстро, для этого необходимо зайти в bitrix/.settings.php и в ключе «exception_handling» найти ключ «debug», поставить его в значение «true» для вывода текста ошибки. Затем по логу ошибки будет видно, в какой строке она происходит, после чего их можно исправить. Если ошибка имеет текст, относящий нас к статическому вызову метода, это означает, что при вызове функции у вас пропущено слово «static», т.к. ранее это не было обязательным для обращения к ней.

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

Требуется обновить веб-сервер
для 1С-Битрикс? Обращайтесь!

Ошибки в «коробке» 1С-Битрикс

Данный вид ошибок встречается редко, т.к. значительная их часть уже исправлена в прошлых обновлениях (если вы устанавливаете ;), однако они все же встречаются. Их можно разделить на два типа:

  • ошибки внутри ядра;
  • ошибки в модулях битрикса.

Наиболее часто они возникают в модулях bitrix.sitecorporate, bitrix.sitepersonal и bitrix.siteinfoportal.

Причина: не обновленный код внутри модуля под php8.

Как исправить: есть три способа, советуем применять их по порядку.1. Установить обновления для указанного в ошибке модуля.2. Обратиться в техподдержку 1С-Битрикс.3. Сделать полную резервную копию сайта, затем убедиться, что это один из модулей демо-коробки, который вы не используете, и только после этого удалить его на странице /bitrix/admin/partner_modules.php. Прибегать к этому пункту стоит, только если у вас есть достаточный опыт работы с 1С-Битрикс и предыдущие пункты не помогли.

Ошибки внутри ядра исправляются как обновлениями, так и «хотфиксами» от разработчиков 1С-Битрикс.

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

Грядущее обновление

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

Итог

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

Все кейсы

Читать другие материалы

case
На что обратить внимание при приемке сайта от разработчиков
Подробнее
case
Методы защиты от спама, рассылаемого при помощи форм обратной связи веб-сайта
Подробнее
case
Как соблюсти 152-ФЗ для 10+ сайтов, не раздувая бюджет?
Подробнее
case
Почему не пускает в админку 1С-Битрикс?
Подробнее
case
Уязвимость модуля «vote» в CMS 1С-Битрикс
Подробнее
case
Чек-лист для аудита виртуального сервера
Подробнее
case
Почему мы заменили fail2ban на CrowdSec и как это поможет при DDoS-атаках
Подробнее
case
Как и зачем проверять скорость загрузки сайта и валидацию
Подробнее
картинка

Задавайте вопросы и заказывайте техническую поддержку сайта

Нажимая на кнопку, вы даете согласие на отправку и обработку своих персональных данных

Телеграмм ITSOFT