BitrixVM как обновить PHP до 7.4 и 8.1
Разработчики CMS Bitrix рекомендовали использовать для BitrixVM версию PHP 7.4. Начиная с февраля 2023 г. рекомендованная версия уже PHP 8.1. Обновить версию PHP до 7.4 или 8.1 вы можете за несколько шагов.
Перед началом работы рекомендуем обязательно создать резервную копию!
Если вы используете более раннюю версию BitrixVM, то сначала нужно обновить ее до актуальноый версии.
PHP 8.1 показывает самый лучшие результаты по скорости работы по сравнению с другими версиями PHP, поэтому мы рекомендуем использовать ее для любого сайта, в том числе для 1С-Битрикс.
Обновление версии BitrixEnv
Подключитесь к серверу по SSH и выполните в меню Bitrix следующие действия:
- Выберите пункт 1. Manage servers in the pool, а затем 10. Enable or disable bitrix-env beta versions:

- Выберите пункт 1. Enable bitrix-env beta versions, а затем введите y для подтверждения обновления:

- Далее в главном меню выберите пункт 1.Manage servers in the pool, а затем 4. Update packages on host.
- При запросе Enter server address введите IP-адрес сервера.
- При запросе Please choose update type введите на выбор: bitrix — для обновления только BitrixEnv до актуальной версии, либо all для обновления всех имеющихся пакетов, в том числе и BitrixEnv.
- Далее будет запущен процесс обновления. После завершения обновления версия BitrixEnv изменится на 7.4.11

Обновление версии PHP до 7.4 или 8.1
- В главном меню выберите пункт 1.Manage servers in the pool, а затем 8. Update PHP and MySQL.
- Далее выберите пункт 1. Upgrade PHP.
- Далее выберите пункт 1. Update PHP to version 7.4 или 8.1, в зависимости от того, какая версия вам нужна, и введите для подтверждения обновления.

На этом обновление версии PHP завершено.
Как обновить версии MySQL и PHP для сайтов на окружении Битрикс
![]()
Для максимальной производительности сайтов на веб-окружении Битрикс важно своевременно обновлять версии PHP и MySQL. Перед началом работ следует обновить веб-окружение Битрикс до последней версии, о том, как это сделать мы рассказывали в статье про обновление веб-окружения Битрикс.
Обновление версии PHP
Подключимся к серверу по SSH и авторизуемся под root-пользователем, чтобы попасть в меню веб-окружения. Далее выберем пункт «1. Manage servers in the pool» :
В открывшемся списке выбираем пункт «8. Update PHP and MySQL» :
Далее вас попросят ввести hostname, после появится меню с выбором увеличения или понижения версия PHP: «1. Update PHP» , «2. Downgrade PHP» :
Текущая версия PHP, которая используется на сервере, — 7.4. Нам необходимо обновление, поэтому выбираем пункт «1. Upgrade PHP» . И в следующем меню для обновления PHP предлагается 2 варианта:
- «1. Update PHP to version 8.1» — обновление PHP до версии 8.1,
- «2. Update PHP to version 8.0» — обновление PHP до версии 8.0.
Выберите нужный пункт, в нашем случае это «2. Update PHP to version 8.0» . Появится строка с подтверждением обновления. Напишите «y» (yes) и нажмите Enter:

Появится сообщение о том, что создано задание на обновление, и будет указан идентификатор задания (Job ID), процесса (PID) и текущий статус выполнения (Status):

Нажимаем Enter, чтобы снова попасть в меню обновления PHP и MySQL, а после четыре раза выбираем пункт «0. Previous screen or exit» и попадаем снова в главное меню окружения. Теперь выберем пункт «10. Background pool tasks» :

И посмотрим статус процесса обновления PHP. Увидели «Finished» — значит, задание успешно завершено, PHP обновлен с 7.4 до 8.0.

Если вам понадобится вернуться к более ранней версии PHP, вы сможете сделать это также в меню «1. Manage servers in the pool» — «8. Update PHP and MySQL» — «2. Downgrade PHP» , выберите пункт с нужной версией PHP, самая низкая доступная версия PHP 5.6 — «1. Downgrade PHP to version 5.6» :

Перед обновлением MySQL-сервера настоятельно рекомендуем сделать бэкапы баз данных, используемых сайтами.
Обновление версии MySQL
Для обновления MySQL-сервера перейдём в меню веб-окружения Битрикс. Выберем пункт «1. Manage servers in the pool» , далее «8. Update PHP and MySQL», затем пункт «3. Upgrade MySQL version» . И наконец пункт «1. Upgrade MySQL to version 8.0» :

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

Нажмем Enter , вернемся в меню обновления PHP и MySQL, после трижды выберем пункт «0. Previous screen or exit» , оказавшись в главном меню, проверим выполнение задачи, перейдя в пункт «10. Background pool tasks» :

Обновление MySQL процесс занимает больше времени, чем обновление PHP, поэтому, скорее всего, вы увидите, что задача ещё выполняется — статус «running»:

Подождите 5-15 минут, выпейте чаю и погладьте кота, и снова зайдите в «Background pool tasks» :

Задача перешла в статус «Finished», и MySQL-сервер успешно обновлен до версии 8.0. Ура, товарищи!
Если у вас возникли сложности с обновлением PHP и MySQL на веб-окружении Битрикс, напишите нам в поддержку — мы поможем.
Как обновить php на сайте битрикс
Обновление PHP до версии 8 может стать проблемой для пользователей Битрикс24 и 1С-Битрикс, однако оно может принести множество преимуществ, таких как улучшенная производительность, большая безопасность и возможности для развития сайта или корпоративного портала. Преимущества обновления PHP для пользователей Битрикс24
Отличия между версиями PHP 7 и 8
Проблемы при обновлении до 8 версии
Рекомендации по обновлению
Преимущества обновления PHP до версии 8 для пользователей Битрикс24
Один из главных аргументов в пользу обновления PHP до версии 8 — это увеличение скорости работы сайта. Версия PHP 8 предлагает новые возможности оптимизации, а также уменьшает нагрузку на сервер. Это может привести к увеличению скорости загрузки страниц и обработки запросов, что улучшает взаимодействие пользователей с сайтом.
Версия PHP 8 также обеспечивает большую безопасность, предоставляя новые функции, позволяющие защищать сайт от уязвимостей, а также устранять ошибки безопасности. Это особенно важно для пользователей Битрикс24, поскольку веб-приложения могут быть подвержены риску взлома.
Кроме того, PHP 8 предоставляет новые функциональные возможности для разработчиков, такие как улучшенный синтаксис, функции оптимизации кода и расширения для работы с базами данных. Это может значительно упростить разработку и ускорить время выпуска новых функций и обновлений.
Еще один важный аргумент в пользу обновления PHP, это техническая поддержка вендора и обновление продукта. Техническая поддержка Bitrix, как правило, требует использования последней версии PHP и ядра Битрикс24, чтобы обеспечить стабильную работу сайта и защитить его от уязвимостей. В противном случае, вам могут отказать в поддержке и обновления ряда компонентов не установятся.
Отличия между версиями PHP 7 и 8
Принципиальное отличие между PHP 7 и 8 заключается в новых функциях и улучшениях, включая JIT-компилятор, более эффективную обработку ошибок, улучшенную работу с типами данных, усовершенствованную работу с асинхронными операциями и другие функции, которые не доступны в более ранних версиях PHP.
Проблемы при обновлении до версии 8
При обновлении PHP могут возникнуть проблемы, связанные с кастомными (самостоятельно разработанными) модулями и компонентами, но в большинстве случаев эти проблемы можно решить, обновив эти модули или компоненты до совместимых версий. Также может возникнуть необходимость в покупке обновлений установленных готовых модулей из Маркетплейс и доработок, которые ранее были выполнены. Эти проблемы могут привести к дополнительным затратам на обновление сайта, но в долгосрочной перспективе они могут оказаться оправданными, благодаря повышению производительности и безопасности сайта.
В целом, обновление PHP до версии 8 может быть полезным шагом для улучшения производительности, безопасности и функциональности сайта. Однако, перед обновлением необходимо подготовиться и проверить совместимость установленных модулей и компонентов с новой версией PHP.
Рекомендации по обновлению
Если вы планируете обновление PHP до версии 8, то рекомендуется сначала протестировать его на тестовой среде, чтобы убедиться, что все модули и компоненты продолжают работать корректно. Также рекомендуется связаться с разработчиками установленных модулей и компонентов, чтобы узнать о совместимости с новой версией PHP.
Отметим, что количество проблем, которые могут возникнуть при переходе на PHP 8, зависит от того, насколько кастомизирован ресурс. Если вы используете кастомные модули и компоненты, то необходимо обновить их до совместимых версий, чтобы избежать проблем при обновлении PHP.
Также следует сделать копию ресурса на тестовом сервере и провести тестирование, чтобы понять, какой функционал сломался и нужно ли его чинить. После этого можно произвести обновление на боевой среде, зная, что именно нужно починить.
В целом, обновление PHP до версии 8 может быть сложным процессом, но он может принести множество преимуществ для вашего сайта. Если вы не уверены в том, как выполнить это обновление, то рекомендуется обратиться к специалистам, которые помогут выполнить обновление правильно и безопасно для вашего сайта, например к нам, в IPG.
Bitrix. Обновить PHP до версии 8.2 и не поседеть
Как перевести CMS Bitrix на PHP 8.2, получить новые возможности и улучшить производительность. Советы по безопасному обновлению.
Рассказываем, как перевести CMS Bitrix на PHP 8.2, получить новые возможности и улучшить производительность. Советы по безопасному обновлению ядра и модулей от веб-разработчиков.
В админке «1С-Битрикс» на странице обновления есть такое сообщение:
Сообщение об ошибке в админке «1С-Битрикс»
Для CMS Bitrix версия PHP 7.Х устарела. Исправления функциональных ошибок и ошибок безопасности Bitrix для этой версии больше не выпускает. Компания предлагает всем своим клиентам обновиться.
Это сообщение расстроило разработчиков. Переход на новую версию PHP очень болезненно воспринимается для легаси кода, так как есть важные обновления синтаксиса PHP, ломающие обратную совместимость. Многие модули из маркетплейса давно заброшены и не адаптированы под новые версии PHP.
Готовимся к обновлению
Ориентировочно на обновление ядра с большим прыжком в версиях PHP закладывается от 15-20 часов. Если проект «запущен», их может не хватить. Добавляем страховочный запас 10-15 часов исходя из объема легаси.
Составляем полный чеклист проверки функционала сайта, чтобы не забыть протестировать.
Рядовые шаги для обновления «1С-Битрикс»:
- Обновить Bitrix локально, исправить баги после обновления.
- Обновить версию PHP локально, исправить баги.
- Обновить на тестовом стенде, если первые два пункта не выполнялись сразу на тесте.
- Исправить баги после тестирования.
- Обновить на бою.
- Исправить баги после обновления на бою.
Несколько важных деталей, которые нужно учесть перед началом обновления:
— До версии 22.500.700 ядра Bitrix можно спокойно обновляться на PHP 7.4, проблем с обратной совместимостью внутри ядра не найдено.
— Шаг 6 почти неизбежен, потому что на 100% проверить тестовый стенд не удастся. Чаще всего есть какой-то код, который отрабатывает в процессе интеграции с боевой площадкой. Если тестовой площадки для интеграции вовсе нет, тогда можно проверить ее только фиктивно, например, через Postman. Все равно придется проверить работоспособность на бою.
— В 9 из 10 случаев проект развернут не в Docker, следовательно нет возможности проставить нужные параметры PHP при обновлении с помощью версионного контроля или обновления утилит для него. Можно только фиксировать его отдельно в копии конфигурационных файлов или в списке утилит для установки.
Шаг 1. Обновляем Bitrix на локальном хосте
Начинаем обновление Bitrix на локальном хосте или на удаленном тестовом сервере.
Базы данных (БД) и ядро должны быть свежими, чтобы исключить ошибки, не связанные с обновлением Bitrix. На локальный хост или тест накатываем свежий бэкап ядра с БД через restore.php, публичная часть не обязательна. Если бэкап сгенерировать не удается, помогут утилиты mysqldump и rsync с опцией delete.
В административной части на странице /bitrix/admin/site_checker.php?lang=ru в разделе «Тестирование базы данных» ошибок быть не должно.
Обновление ядра и модулей мы оставляем на плечи системы обновления 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 чаще всего нет. А разработчик может обнаружить только столько проблем, на сколько он наткнется. Поэтому обязательно нужно делать проверку на доступном заказчику/тестировщику тестовом хосте.
Выполняем обновление на тестовом хосте, если проблем на локальном больше найти не можем:
- собираем в версионный контроль все изменения кодовой базы проекта,
- на тесте выполняем обновление ядра, смену версии PHP, подтягиваем через версионный контроль исправления кода,
- отдаем сайт на проверку тестировщику или заказчику.
При тестировании важно отсеивать только ошибки, связанные с обновлением.
- Если ошибка воспроизводится и на бою, выносим в отдельную задачу.
- Если ошибка связана с тем, что проект развернут на тестовом хосте, игнорируем, так как настройка тестового стенда будет отдельной задачей.
- Если наблюдаются просадки по производительности, это нормально — тестовый хост на несколько порядков медленнее прода.
Проверка на тестовом хосте не даст гарантии, что на тесте новых проблем не будет, так как часто нет возможности проверить интеграции или обмен с «1С-Битрикс».
На тесте необходимо также тщательно проверять весь функционал, как илокально. Обычно натесте появляются новые ошибки, которые неудалось обнаружить локально.
Если на проекте есть тестировщик, то ему нужно проверить весь функционал сайта, включая формирование фидов. А при наличии тестовых площадок — еще и общение с внешними системами.
На практике возникали проблемы с интеграциями, в частности с генерацией фидов разной степени важности, ошибками в обработчиках событий при интеграции с внешними площадками. Их обнаруживали только на бою, что очень расстроило заказчика. Поэтому важно проявлять проактивность и следить за выполнением агентов на тесте или cron-скриптов. Скорее всего после смены версии PHP поменялась версия и PHP CLI. Поэтому необходимо проверить работу всех cron-скриптов.
Шаг 3. Обновляем Bitrix на бою
Мы успешно проделали предыдущие этапы, багов больше не видим, понимаем, что все в порядке.
На проде обновление Bitrix занимает от 1 до 5 часов. Многое зависит от объема проекта и потенциальных багов, на которые можно наткнуться после, даже с учетом проверок на тесте.
Предварительно проверяем работу системы обновлений Bitrix на бою, так как в нужное время она может заблокироваться и придется переносить время обновления. Техподдержка работает с 10:00 до 19:00.
Обновляем систему в неактивные часы в начале или в середине рабочей недели.
Обычно обновление планируют в 20:00-21:00, чтобы было меньше пользователей., т.к. сайт в это время будет недоступен.
Выполняем стандартные шаги обновления Bitrix:
- Закрываем публичную часть. В настройках главного модуля жмем кнопку «Закрыть доступ для посетителей». У всех пользователей, кроме админов, будет заблокирован доступ к публичной части. Это делается для того, чтобы в процессе подготовки бэкапа не появились новые заказы или отзывы, которые потеряются, если придется восстанавливаться из бэкапа.
- Делаем полный бэкап сайта. Чтобы ускорить процесс, рекомендуем исключить из бэкапа папку Upload, а также разделы с кэшем Bitrix и другими бэкапами сайта.
- Обновляем Bitrix и модули по аналогии с локальной и тестовой версией. Проверяем результат в публичной части.
- Обновляем версию PHP, тянем через версионный контроль исправления кода, выполняем проверку в течении 10-15 минут на наличие ошибок PHP. Важно их быстро обнаружить и исправить. Для быстрого деплоя таких «хотфиксов» рекомендуем настроить удаленный деплой через IDE, например, PHPStorm. Это позволит править файлы не через файловую систему, а быстро находить проблемные места и вносить корректировки через развернутый проект. После окончания работ все изменения можно будет собрать на бою через версионный контроль и залить в репозиторий.
- Открываем публичную часть, проверяем работу сайта, запускаем тесты и проводим ручное тестирование критичного функционала, правим ошибки, следим за логами Bitrix на наличие скрытых ошибок. На этом этапе можно сказать, что обновление успешно завершено. В течении суток может что-то всплыть, поэтому оставляем сайт на ночь. На следующий день смотрим на логи ошибок, правим.
Важно не забывать, что ошибки рано или поздно закончатся, поэтому относиться к ним нужно спокойно и размеренно. Ведь код, который раньше выполнялся с предупреждениями, скорее всего был построен неверно или интерпретировался не явно, поэтому функционал мог сбоить или не работать. А теперь часть легаси может актуализироваться и возобновить работу.
Если всплыла ошибка катастрофических масштабов на бою, то останавливаем обновление, закрываем публичную часть, разворачиваем резервную копию Bitrix, которую мы сделали перед обновлением. Если есть изменения, ломающие обратную совместимость, откатываем исправления кода.
Основные подводные камни при обновлении до PHP 8.2
У Bitrix есть остроспецифические проблемы, кроме очевидных для каждого этапа:
1. Обмен с 1С. При обновлении или создании товаров из 1С могут «посыпаться» товары с неверно объявленными свойствами. Например, для типа строка передается массив. Это видно в логах PHP, но исправлять нужно либо на уровне Bitrix, либо на уровне 1С. Чаще исправляем на стороне сайта, внесение изменений в 1С чревато серьезными последствиями.
2. Плавающие ошибки. Часто функционал отрабатывает через раз — то ли в count() передается массив, то ли просто значение null. Это классический пример небезопасного программирования. Для понимания обычно хватает проверки на тип данных.
3. Нестандартное обращение с API Bitrix. У нас все расписано на примере компонента меню Bitrix, файл меню был дополнен руками для создания вложенных массивов. Это только одна из возможных проблем, когда приходится переписывать работу компонента через что-то, что не отваливается при запуске.
Пример исправленного меню Bitrix
4. Обмен с интегрируемыми системами. Чаще всего интеграция Bitrix с внешней системой реализуется модулем с маркетплейса, который обновляет создавшая его команда. Обновление интеграции сводится к обновлению модуля Bitrix из админки. Бывает, что интеграцию пишет команда разработки для определенной задачи, тогда и ее обновление в идеале должна сделать команда перед обновлением Bitrix.