Как обновить php на сайте битрикс
Перейти к содержимому

Как обновить php на сайте битрикс

  • автор:

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. Выберите пункт 1. Manage servers in the pool, а затем 10. Enable or disable bitrix-env beta versions:

Включение бета-версии BitrixVM

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

Включение бета-версии BitrixVM

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

Обновление BitrixVM

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

BitrixVM как обновить PHP до 7.4

На этом обновление версии PHP завершено.

Bitrix. Обновить PHP до версии 8.2 и не поседеть

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

Обложка поста Bitrix. Обновить PHP до версии 8.2 и не поседеть

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 1

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

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

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

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

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

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

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

  1. Обновить Bitrix локально, исправить баги после обновления.
  2. Обновить версию PHP локально, исправить баги.
  3. Обновить на тестовом стенде, если первые два пункта не выполнялись сразу на тесте.
  4. Исправить баги после тестирования.
  5. Обновить на бою.
  6. Исправить баги после обновления на бою.

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

— До версии 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, исправление кода проекта — на версионный контроль.

Bitrix. Обновить PHP до версии 8.2 и не поседеть 2

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

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 3

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

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

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

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 4

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

Решение. На время обновления на тестовые хосты повесить базовую авторизацию или вовсе выключить их. Написать в техподдержку 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.

Bitrix. Обновить PHP до версии 8.2 и не поседеть 5

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 6

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 7

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 8

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 9

Таблица b_module_to_module в Bitrix

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

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

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

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

  • собираем в версионный контроль все изменения кодовой базы проекта,
  • на тесте выполняем обновление ядра, смену версии PHP, подтягиваем через версионный контроль исправления кода,
  • отдаем сайт на проверку тестировщику или заказчику.

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

  1. Если ошибка воспроизводится и на бою, выносим в отдельную задачу.
  2. Если ошибка связана с тем, что проект развернут на тестовом хосте, игнорируем, так как настройка тестового стенда будет отдельной задачей.
  3. Если наблюдаются просадки по производительности, это нормально — тестовый хост на несколько порядков медленнее прода.

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

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

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

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

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

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

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

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

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

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

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

  1. Закрываем публичную часть. В настройках главного модуля жмем кнопку «Закрыть доступ для посетителей». У всех пользователей, кроме админов, будет заблокирован доступ к публичной части. Это делается для того, чтобы в процессе подготовки бэкапа не появились новые заказы или отзывы, которые потеряются, если придется восстанавливаться из бэкапа.
  2. Делаем полный бэкап сайта. Чтобы ускорить процесс, рекомендуем исключить из бэкапа папку Upload, а также разделы с кэшем Bitrix и другими бэкапами сайта.
  3. Обновляем Bitrix и модули по аналогии с локальной и тестовой версией. Проверяем результат в публичной части.
  4. Обновляем версию PHP, тянем через версионный контроль исправления кода, выполняем проверку в течении 10-15 минут на наличие ошибок PHP. Важно их быстро обнаружить и исправить. Для быстрого деплоя таких «хотфиксов» рекомендуем настроить удаленный деплой через IDE, например, PHPStorm. Это позволит править файлы не через файловую систему, а быстро находить проблемные места и вносить корректировки через развернутый проект. После окончания работ все изменения можно будет собрать на бою через версионный контроль и залить в репозиторий.
  5. Открываем публичную часть, проверяем работу сайта, запускаем тесты и проводим ручное тестирование критичного функционала, правим ошибки, следим за логами Bitrix на наличие скрытых ошибок. На этом этапе можно сказать, что обновление успешно завершено. В течении суток может что-то всплыть, поэтому оставляем сайт на ночь. На следующий день смотрим на логи ошибок, правим.

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

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

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

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

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

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

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

Bitrix. Обновить PHP до версии 8.2 и не поседеть 10

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

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

База знаний

Как обновить «Битрикс: Веб-окружение» и версию PHP для сайтов

«Битрикс: Веб-окружение» рекомендуется содержать в актуальном состоянии — что в свою очередь позволяет обновлять версии MySQL и PHP для сайтов через контекстное меню.

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

Для обновления окружения подключаемся к серверу по протоколу SSH и в контекстном меню Битрикс, последовательно переходим по пунктам 1. Manage servers in the pool — 4. Update packages on host.

В контекстном меню введите имя сервера или его IP-адрес, а также укажите все ли пакеты вы хотите обновить (all) или только окружение Битрикс (bitirx). После чего будет запущено задание по обновлению системы. Для выхода из меню нажмите клавишу Enter.

Для обновления пакетов потребуется некоторое время, возможно даже значительное. Информация о состоянии и результатах запущенного задания доступно в контекстном меню Битрикс под пунктом 5. Background tasks in the poll (в нашем случае используется окружение версии 7.3.0)

После успешного выполнения задания вас будет приветствовать новое окружение Битрикс.

В процессе обновления «Битрикс: Веб-окружение» PHP и MySQL автоматически не обновляются.

Для обновления PHP в контекстном меню Битрикс последовательно переходим по пунктам 1. Manage servers in the pool — 8. Update PHP and MySQL.

Текущая версия PHP, которая используется на сервере, — 7.1. В меню для смены PHP предлагается 2 варианта:
«Rollback PHP to version 7.0» — возврат к версии 7.0
«Update PHP to version 7.2» — обновление PHP до версии 7.2

Так как мы хотим обновить версию PHP выбираем пункт «2. Update PHP to version 7.2». Появится строка с подтверждением обновления. Подтверждаем y и нажимаем клавишу Enter. После чего будет запущена задача обновления, для выхода нажимает клавишу Enter, после чего мы будем возвращены к текущему меню.

Для просмотра статуса обновления последовательно переходим по пунктам 0. Previous screen or exit — 0. Previous screen or exit — 10. Background pool tasks. Наше задание уже завершено — PHP обновлен до версии 7.2:

Стоит обратить внимание, что на данный момент возможные версии PHP — 5.6, 7.0, 7.1 и 7.2. Для того, чтобы воспользоваться обновлением PHP до нужной вам версии, необходимо последовательно обновить версии PHP и MySQL с помощью пункта меню 1. Manage hosts in the pool — 8. Update PHP and MySQL.
Аналогичным способом можно и понизить версию PHP пройдя шаги по понижению PHP: 7.2 > 7.1 > 7.0 > 5.6 с помощью пункта меню 1. Rollback php to х.х version

Как установить последнюю версию PHP на BitrixVM

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

BitrixVM — это готовый виртуальный образ, который создан для работы с компонентами 1С-Битрикс. Ее можно скачать на официальном сайте.

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

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

  1. Обновление BitrixEnv до последней стабильной версии.
  2. Переход на beta-версию BitrixEnv.
  3. Обновление версии PHP.

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

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

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

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

/root/menu.sh

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

php битрикс вм 1

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

php битрикс вм 2

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

php битрикс вм 3

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

php битрикс вм 4

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

php битрикс вм 5

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

php битрикс вм 6

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

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

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

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

/root/menu.sh

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/root/menu.sh

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

php битрикс вм 1

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

php вм битрикс 19

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

php вм битрикс 20

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

php вм битрикс 21

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

php вм битрикс 22

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

php вм битрикс 23

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

php вм битрикс 24

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

Популярные статьи

  • Как указать (изменить) DNS-серверы для домена
  • Я зарегистрировал домен, что дальше
  • Как добавить запись типа A, AAAA, CNAME, MX, TXT, SRV для своего домена
  • Что такое редирект: виды и возможности настройки
  • Как создать почту со своим доменом

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *