Bitrix обновить php

Bitrix обновить php Хостинг

При смене версии php на 8.0, 8.1 нарушается работа множества функций. С чем это связано и как правильно переехать?

Битрикс предупреждает, что поддержка продуктов на версии ниже 8.0 прекратится 1 февраля 2023 года.

При переходе много косяков именно со сторонними решениями, особенно если не куплено продление или модуль заброшен. Некоторые общие ошибки описал здесь https://www.brekot.ru/blog/1s-bitriks-i-php-8/ Возможно кому поможет разобраться.

У меня тоже начала не заработало, точнее сайт и админка открывались, но как будто без стилей и графики.
В исходном коде была ошибка:

Удалил модуль «TagManager. Сервисы Аналитики (concept.tagmanager)» — и все заработало.

14 авг. 2023, в 18:57

500 руб./за проект

14 авг. 2023, в 18:34

1500 руб./за проект

14 авг. 2023, в 17:56

50000 руб./за проект

Рассказываем, как перевести CMS Bitrix на PHP 8.2, получить новые возможности и улучшить производительность. Советы по безопасному обновлению ядра и модулей от веб-разработчиков.

В админке «1С-Битрикс» на странице обновления есть такое сообщение:

Сообщение об ошибке в админке «1С-Битрикс»

Для CMS Bitrix версия PHP 7. Х устарела. Исправления функциональных ошибок и ошибок безопасности Bitrix для этой версии больше не выпускает. Компания предлагает всем своим клиентам обновиться.

Это сообщение расстроило разработчиков. Переход на новую версию PHP очень болезненно воспринимается для легаси кода, так как есть важные обновления синтаксиса PHP, ломающие обратную совместимость. Многие модули из маркетплейса давно заброшены и не адаптированы под новые версии PHP.

Готовимся к обновлению

Ориентировочно на обновление ядра с большим прыжком в версиях PHP закладывается от 15-20 часов. Если проект «запущен», их может не хватить. Добавляем страховочный запас 10-15 часов исходя из объема легаси.

Составляем полный чеклист проверки функционала сайта, чтобы не забыть протестировать.

Рядовые шаги для обновления «1С-Битрикс»:

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

— До версии 22.500.700 ядра Bitrix можно спокойно обновляться на PHP 7.4, проблем с обратной совместимостью внутри ядра не найдено.

— Шаг 6 почти неизбежен, потому что на 100% проверить тестовый стенд не удастся. Чаще всего есть какой-то код, который отрабатывает в процессе интеграции с боевой площадкой. Если тестовой площадки для интеграции вовсе нет, тогда можно проверить ее только фиктивно, например, через Postman. Все равно придется проверить работоспособность на бою.

— В 9 из 10 случаев проект развернут не в Docker, следовательно нет возможности проставить нужные параметры PHP при обновлении с помощью версионного контроля или обновления утилит для него. Можно только фиксировать его отдельно в копии конфигурационных файлов или в списке утилит для установки.

Начинаем обновление Bitrix на локальном хосте или на удаленном тестовом сервере.

Базы данных (БД) и ядро должны быть свежими, чтобы исключить ошибки, не связанные с обновлением Bitrix. На локальный хост или тест накатываем свежий бэкап ядра с БД через restore.php, публичная часть не обязательна. Если бэкап сгенерировать не удается, помогут утилиты mysqldump и rsync с опцией delete.

Обновление ядра и модулей мы оставляем на плечи системы обновления Bitrix, исправление кода проекта — на версионный контроль.

Жмем кнопку установить

Проблемы, которые могут возникнуть в процессе обновления

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

Пример ошибки синтаксиса

Решение. Лезть в код и фиксить ошибку. Каждую такую ошибку фиксировать у себя в доке, чтобы можно было быстро сделать исправление при обновлении на тесте и на бою. Как только ошибка будет исправлена, можно продолжить обновление.

2. Ошибка в MySQL. Пользователю БД может не хватать прав для обновления таблиц или выполнения команд типа set innodb_strict_mode=ON. Либо конфигурация сервера может не соответствовать боевому.

Решение. Выполнить нужные конфигурации БД, например, выделить для БД больше буферной памяти или расширить права доступа пользователя под которым общается Bitrix с БД. Перезапустить обновление.

3. Заблокирована система обновлений. Ошибка частая, так как тестовые хосты имеют открытый доступ из интернета. Bitrix обнаруживает такие хосты и блокирует систему обновления не по лицензии.

Пример сообщения об ошибке после нажатия на кнопку «Обновить»

Читайте также:  Защита админки

Решение. На время обновления на тестовые хосты повесить базовую авторизацию или вовсе выключить их. Написать в техподдержку Bitrix запрос на удаление ошибки обновления. После этого — продолжить обновление.

4. Не хватает прав на изменение файлов. Распространенная проблема Linux, когда у пользователя сервера не хватает прав, чтобы создать или изменить нужные файлы ядра. Это особенно заметно при обновлении ядра.

Решение. Настроить конфигурацию сервера, чтобы он работал от имени текущего пользователя, не рутом. Выполнить рекурсивную смену прав в ядре командой chown -R. После таких операций проблема должна уйти и можно продолжить обновление.

Как только обновление прошло успешно, переходим наобновление модулей потомуже принципу.

Если модуль платный и лицензия истекла, ее нужно продлить. Если ошибка после обновления модуля не пропала, то модуль необходимо удалить. Если править модуль, то в дальнейшем его нельзя будет корректно обновить.

Если модуль очень старый и давно не обновляется, его придется перенести в локальную область и содержать самостоятельно.

После успешного обновления Bitrix и модулей переходим в публичную часть, проверяем основной важный функционал сайта, фиксим ошибки PHP или конфликты с API Bitrix и модулей.

Приступаем к обновлению версии PHP после обновления Bitrix и проверки работы проекта.

Здесь может возникнуть больше всего сложностей, так как кодовая база ссылалась на «помощь» со стороны PHP 7.4. Код, который раньше выполнялся на PHP 7.4 с предупреждениями, на PHP 8.2 будет падать с фатальной ошибкой. Это позволит определить нерабочий функционал.

Основные критичные для Bitrix ошибки, которые вылезают после обновления версии PHP

1. Нестатические методы для обработчиков событий. В PHP 8.2 больше нельзя вызывать нестатические методы через статический синтаксис. Это касается обработчиков событий. Если они находятся внутри класса в виде функции, то, чтобы ошибка ушла, в каждую такую функцию нужно будет добавить public static.

Пример корректировки обработчика события

2. Статический вызов нестатических методов. Ряд модулей в проекте были перенесены в локальную область уже очень давно, синтаксис сильно устарел. Было много методов через чистый function, поэтому нужно добавлять к каждому методу public static.

Пример методов, которые могут вызывать ошибку

3. Строгая типизация при работе с стандартными функциями PHP. В PHP 8.2 нельзя передавать в функцию count() значения типа null или string. В нашем случае компонент Menu был построен на вложенных массивах внутри параметра ADDITIONAL_LINKS. Так делать нельзя, так как в ядре Bitrix проверка выполняется через Rel2Abs — она принимает на вход строку, но не массив. Этот функционал был переписан через дополнительные параметры.

Пример обработки ошибки с несуществующим элементом массива

4. Обращение к строке как к массиву. В шаблонах часто возникают старые ошибки с ключом VALUE для вывода значения свойств. Оно не у всех есть, поэтому страница падает.

5. Старые обработчики событий Bitrix, которые ссылаются на несуществующие классы/методы. Обработчики событий модуля регистрируются не через код, а записываются в таблицу b_module_to_module в БД. Если когда-то был использован кастомный модуль, который меняли так, что доступа к обработчикам нет; или модуль был удален на уровне кодовой базы, а из БД ничего не стиралось — здесь это проявится, возникнут фатальные ошибки при попытке их исполнения. Решение простое: корректируем эти обработчики события в БД или удаляем строки вовсе. Можно это сделать сразу на бою/тестовом хосте, чтобы после обновления не натыкаться на такие проблемы.

Таблица b_module_to_module в Bitrix

В процессе исправления ошибок очень важно не забывать, что главная задача — обновление ядра и версии PHP. Рефакторить код на этом этапе НЕ НУЖНО.

Шаг 2. Проверяем на тестовом контуре

Автотестов и каких-либо тестов на написанный код в Bitrix чаще всего нет. А разработчик может обнаружить только столько проблем, на сколько он наткнется. Поэтому обязательно нужно делать проверку на доступном заказчику/тестировщику тестовом хосте.

Выполняем обновление на тестовом хосте, если проблем на локальном больше найти не можем:

При тестировании важно отсеивать только ошибки, связанные с обновлением.

Проверка на тестовом хосте не даст гарантии, что на тесте новых проблем не будет, так как часто нет возможности проверить интеграции или обмен с «1С-Битрикс».

На тесте необходимо также тщательно проверять весь функционал, как илокально. Обычно натесте появляются новые ошибки, которые неудалось обнаружить локально.

Если на проекте есть тестировщик, то ему нужно проверить весь функционал сайта, включая формирование фидов. А при наличии тестовых площадок — еще и общение с внешними системами.

На практике возникали проблемы с интеграциями, в частности с генерацией фидов разной степени важности, ошибками в обработчиках событий при интеграции с внешними площадками. Их обнаруживали только на бою, что очень расстроило заказчика. Поэтому важно проявлять проактивность и следить за выполнением агентов на тесте или cron-скриптов. Скорее всего после смены версии PHP поменялась версия и PHP CLI. Поэтому необходимо проверить работу всех cron-скриптов.

Читайте также:  Как создать сайт на Joomla: пошаговая инструкция для новичков

Шаг 3. Обновляем Bitrix на бою

Мы успешно проделали предыдущие этапы, багов больше не видим, понимаем, что все в порядке.

На проде обновление Bitrix занимает от 1 до 5 часов. Многое зависит от объема проекта и потенциальных багов, на которые можно наткнуться после, даже с учетом проверок на тесте.

Предварительно проверяем работу системы обновлений Bitrix на бою, так как в нужное время она может заблокироваться и придется переносить время обновления. Техподдержка работает с 10:00 до 19:00.

Обновляем систему в неактивные часы в начале или в середине рабочей недели.

Обычно обновление планируют в 20:00-21:00, чтобы было меньше пользователей., т.к. сайт в это время будет недоступен.

Выполняем стандартные шаги обновления Bitrix

Важно не забывать, что ошибки рано или поздно закончатся, поэтому относиться к ним нужно спокойно и размеренно. Ведь код, который раньше выполнялся с предупреждениями, скорее всего был построен неверно или интерпретировался не явно, поэтому функционал мог сбоить или не работать. А теперь часть легаси может актуализироваться и возобновить работу.

Если всплыла ошибка катастрофических масштабов на бою, то останавливаем обновление, закрываем публичную часть, разворачиваем резервную копию Bitrix, которую мы сделали перед обновлением. Если есть изменения, ломающие обратную совместимость, откатываем исправления кода.

Основные подводные камни при обновлении до PHP 8

У Bitrix есть остроспецифические проблемы, кроме очевидных для каждого этапа:

1. Обмен с 1С. При обновлении или создании товаров из 1С могут «посыпаться» товары с неверно объявленными свойствами. Например, для типа строка передается массив. Это видно в логах PHP, но исправлять нужно либо на уровне Bitrix, либо на уровне 1С. Чаще исправляем на стороне сайта, внесение изменений в 1С чревато серьезными последствиями.

2. Плавающие ошибки. Часто функционал отрабатывает через раз — то ли в count() передается массив, то ли просто значение null. Это классический пример небезопасного программирования. Для понимания обычно хватает проверки на тип данных.

3. Нестандартное обращение с API Bitrix. У нас все расписано на примере компонента меню Bitrix, файл меню был дополнен руками для создания вложенных массивов. Это только одна из возможных проблем, когда приходится переписывать работу компонента через что-то, что не отваливается при запуске.

Пример исправленного меню Bitrix

4. Обмен с интегрируемыми системами. Чаще всего интеграция Bitrix с внешней системой реализуется модулем с маркетплейса, который обновляет создавшая его команда. Обновление интеграции сводится к обновлению модуля Bitrix из админки. Бывает, что интеграцию пишет команда разработки для определенной задачи, тогда и ее обновление в идеале должна сделать команда перед обновлением Bitrix.

С какими ошибками вы сталкивались при обновлении? И как их решали? Пишите в комментариях.

You might have noticed such a warning in the Control panel of your Bitrix24 On-Premise:

As of 02/01/2023 only limited support will be provided for our products running on PHP versions below 8.0. P HP 8.1 or higher is recommended. You are currently using PHP 7.4.33. Please update your PHP installation or contact your hosting service provider for assistance.

What does it mean?

All PHP 7 versions are now end-of-life and no longer supported. There will be no bug or security fixes made to any of the PHP 7 versions. Thus, it is not recommended to use any PHP versions below 8.0.

You will not be able to install any platform updates to get new features, improve security and performance of your site until you upgrade your version of PHP to at least version 8.0 or the recommended version 8.1 in your virtual server environment.

What should I do?

You should schedule an update of your PHP version to at least version 8.0 or the recommended version 8.1 as soon as possible.

Common issues and how to solve them

Note that these recommendations are provided to solve the issues in the operation of a specific module. Each error should be reviewed individually by the developer.

This error may appear after upgrading your PHP version to 8.0 or higher. In this case, the site works correctly, but it is not possible to install or update any other solutions until the issue is solved.

Solution

Connect to FTP/SFTP or log in to the hosting control panel, and enable the error output in /bitrix/.settings.php:

After that, you will see the error message text on the site.

Example of the error message text

Non-static method SuperFunctionsCSuperModRep::checkBack() cannot be called statically (0) /home/bitrix/modules/super.mod/lib/functions/CSuperModRep.php:52 #0: SuperFunctionsCSuperModRep::checkRepActive() /home/bitrix/modules/super.mod/classes/general/CModEvents.php:1621 #1: CModEvents::OnPageStartHandler() /home/bitrix/modules/main/classes/general/module.php:480 #2: ExecuteModuleEventEx(array) /home/bitrix/modules/main/include.php:163 #3: require_once(string) /home/bitrix/modules/main/include/prolog_before.php:14 #4: require_once(string) /home/bitrix/modules/main/include/prolog.php:10 #5: require_once(string) /home/bitrix/header.php:1 #6: require(string) /home/index.php:1

In this example, the third-party method CSuperModRep::checkBack() of the super.mod. solution gives the error.

Читайте также:  Услуги домашнего интернета - IDC | Интерднестрком

To fix the error, in the checkBack() code, you need to declare the static function.

public static function checkBack()

This error may appear after upgrading to PHP 8.x if you have not installed the available platform updates when using the PHP 7.x version.

This issue has been fixed in the Main module updates main 22.100.0.

Downgrade to the previous PHP version 7.x, get all the recommended updates, and then upgrade to PHP 8.x again.

This error may appear after upgrading to PHP 8.x, but it is not obvious:

This error may appear because of setting the short_open_tag = Off parameter in PHP settings.

Was this information helpful?

Integration specialist assistance

That’s not what I’m looking for

Complicated and incomprehensible text

The information is outdated

It’s too short. I need more information

I don’t like the way this tool works

Update PHP and MySQL versions based upon recommended Bitrix24 system requirements.

PHP and MySQL are not automatically updated during the BitrixVA update. They can be updated manually via the virtual appliance menu item 1. Manage servers in the pool — 8. Update PHP and MySQL.

Note: Menu item 1. Manage servers in the pool — 8. Update PHP and MySQL appears only in BitrixVM version 5.1.x and higher.

Indicate all to update only PHP on all virtual appliances with the web role, included into the pool, or indicate an appliance with a specific hostname for updating PHP and MySQL:


Bitrix обновить php

Then, select PHP or MySQL options:


Bitrix обновить php

Upgrade PHP

To update PHP version, select a corresponding item Update PHP to version х.х:


Bitrix обновить php

Note: Presently available PHP versions: 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1.
Starting February 1st, 2023 all Bitrix24 products require minimal PHP version 8.0, and recommended PHP version 8.1.

In similar manner, PHP version can be downgraded, by selecting a required version via the menu item Downgrade PHP to version х.х. Minimum PHP version for VMbitrix. CRM – 7.0.

If you have updated BitrixVA/BitrixEnv to version 7.1 and higher, then you will have an option to update MySQL version to 5.7 Percona DB. It can be done via selection of item 2. Upgrade MySQL to 5.7 version:

After updating MySQL to version 5.7, you can update MySQL to version 8.0 – Upgrade MySQL to 8.0 version:

В статье мы расскажем, как установить последнюю версию PHP для виртуальной машины Битрикс.

BitrixEnv — это веб-окружение 1С-Битрикс. С его помощью можно устанавливать новое ПО и регулировать настройки для корректной работы Битрикса.

Виртуальная машина Битрикс стабильно работает на CentOS 7, но из соображений безопасности необходимо менять версию PHP по мере выхода обновлений. Эти изменения проводятся в три этапа:

Каждый из шагов мы подробно опишем ниже.

Как обновить BitrixEnv до последней версии

1. Подключитесь к серверу по SSH.

2. Откройте меню Битрикс:

3. Перейдите в раздел Configure localhost settings:


Bitrix обновить php

4. Выберите пункт Update server:


Bitrix обновить php

5. Подтвердите обновление, нажав y:


Bitrix обновить php

6. Когда завершится обновление, нажмите Enter:


Bitrix обновить php

7. На экране отобразится сообщение из шага 5. Введите N:


Bitrix обновить php

8. Чтобы вернуться в главное меню, выберите Previous screen or exit:


Bitrix обновить php

Готово, вы обновили BitrixEnv.

Как перейти на beta-версию BitrixEnv

3. Перейдите в раздел Manage servers in the pool:


Bitrix обновить php

4. Выберите Enable or disable bitrix-env beta versions:


Bitrix обновить php

5. Запустите обновление, выбрав пункт Enable bitrix-env beta versions:


Bitrix обновить php

6. В качестве подтверждения введите y:


Bitrix обновить php

7. По окончании загрузки нажмите Enter:


Bitrix обновить php

8. Вернитесь в предыдущее меню, выбрав Previous screen or exit:


Bitrix обновить php

9. Вернитесь в главное меню, выбрав пункт Previous screen or exit:


Bitrix обновить php

10. Перейдите в раздел Configure localhost settings:


Bitrix обновить php

11. Выберите Update server:


Bitrix обновить php

12. Для подтверждения нажмите y:


Bitrix обновить php

После обновления нажмите Enter:


Bitrix обновить php

13. На экране отобразится сообщение из предыдущего шага. Введите N:


Bitrix обновить php

Готово, вы перешли на beta-версию BitrixEnv.

Как обновить версию PHP

4. Выберите Update PHP and MySQL:


Bitrix обновить php

5. Введите имя домена, для которого нужно обновить версию PHP. Если обновление требуется для всех хостов, введите all:


Bitrix обновить php

6. Перейдите в меню Upgrade PHP:


Bitrix обновить php

7. Выберите Update PHP to version X. X. Вместо X. X используйте нужную версию из списка:


Bitrix обновить php

8. Подтвердите обновление. Для этого введите y:


Bitrix обновить php

9. Дождитесь окончания обновления. Затем нажмите Enter:


Bitrix обновить php

Готово, вы обновили версию PHP.

Оцените статью
Хостинги