Обновление старого Bitrix сайта с php 5.6

bitrix php 5.6

Недавно довелось обновлять старый сайт на CMS Bitrix, который не обслуживали более 5 лет. Сайт за это время успел пострадать от взлома, но благо была резервная копия проекта, с которой и началась эта история про обновление старого Bitrix сайта с php 5.6 до последней версии Bitrix, php 8.3 и mysql 8.

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

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

Перед обновлением

Главным условием для проведения обновления является актуальная лицензия на CMS Битрикс с возможностью установки актуальных обновлений. Прежде чем приступать стоит продлить лицензию и дождаться актуализации подписки.

Так же, перед обновлением рекомендую сделать резервную копию сайта и базы данных. Сделать это можно вручную скопировав файлы проекта и сделав дамп базы mysql, так и с помощью встроенных средств bitrix в разделе «Настройки \ Инструменты \ Резервное копирование».

На момент проведения работу у меня был на руках сайт на обычном шаред хостинге от nic.ru с Битрикс 18 версии, php 5.6 и mysql 5-й версии. Обновление пришлось проводить поэтапно с устранением выявленных недостатков.

Обновление Bitrix с php 5.6 до php 7.4

После того как лицензия обновлена и сайту стали доступны онлайн обновления идем в Marketplace \ Обновление платформы и устанавливаем доступные обновления. В моём случае это был только сам модуль обновления. Сразу после этого он выдал ошибку совместимости php и ошибку не установленной опции default_charset в настройках php. При том, что в настройках php была указана эта опция её необходимо было задать явно для сайта. На хостинге это можно сделать с использованием файла .htaccess

<IfModule mod_php5.c>
	php_flag allow_call_time_pass_reference 1
	php_flag session.use_trans_sid off
    php_value default_charset UTF-8

	#php_value display_errors 1

	#php_value mbstring.internal_encoding UTF-8
</IfModule>

## Либо вне модуля 
php_value default_charset UTF-8

Обратите внимание, что если указать переменную в условии ifmodule, то после обновления версии php необходимо будет переписать файл .htaccess отредактировав на текущую версию php, удобнее указать переменную вне условия модуля.

После этого идем в «Настройки \ Инструменты \ Проверка системы». Выполняем проверку и устраняем выявленные недочеты. Как минимум необходимо исправить те, что Битрикс предлагает исправить сам кликнув на ссылку «исправить». Так же не лишним будет пройти «Настройки \ Инструменты \ Диагностика \ Проверка БД» и там же «Оптимизация БД». Убедится, что всё хорошо. После этого возвращаемся к менеджеру обновлений и устанавливаем все предлагаемые обновления.

Переход Битрикс на PHP 7.4

После того как процесс обновления завершится (менеджер обновлений больше не предлагает новых пакетов) можно сменить в настройках хостинга версию php на 7.4. После этого сайт перестанет работать, поскольку с версии php 7 поменялась используемая библиотека для доступа к СУБД MySQL. Необходимо исправить это в двух файлах конфигурации Bitrix.

В файле bitrix/.settings изменить имя класса для подключения к субд с MysqlConnection на MysqliConnection.

 'connections' => 
  array (
    'value' => 
    array (
      'default' => 
      array (
        'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
        'host' => 'localhost',
        'database' => 'bitrixdb',
        'login' => 'bitrixdblogin',
        'password' => 'bitrixdbpassword',
        'options' => 2,
      ),

В файле bitrix/php_interface/dbconn.php добавить параметр:

define("BX_USE_MYSQLI", true);

Убедитесь, что в .htaccess или настройках php вашего сервера настроена верная опция:

php_value default_charset UTF-8

Если всё сделали верно то сайт откроется. Проводим проверку и устранение неисправностей «Настройки \ Инструменты \ Проверка системы» и «Настройки \ Инструменты \ Диагностика \ Проверка БД» и там же «Оптимизация БД».

Так же менеджер обновлений на этом этапе попросил отключить функцию php:

mbstring.func_overload = 0

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

Переход Bitrix на php 8.3

После установки всех обновлений на предыдущем шаге версия Битрикс уже должна быть выше 22.+. Меняем в настройках хостинга версию php на 8 (последний на момент написания статьи был 8.3) и далее по уже понятной схеме проверка сайта, исправление ошибок, установка обновлений.

На этом шаге у меня выскочила ошибка в типах таблиц на сервере СУБД. Некоторые таблицы были на движке MyISAM с неверным типом. CMS сама предложила исправить но смогла исправить не все. В логе проверки указаны таблицы, которые она не смогла исправить. Можно просто зайти в phpmyadmin и исправить типа движка согласно рекомендациям для каждой таблицы.

После этого тест проходит и предлагает обновить структуру данных. На этом этапе возникла проблема при попытке исправления появлялась ошибка: «Ошибочный ответ сервера. Не удалось завершить тестирование».

Возможное решение данной проблемы описанное в интернет мне не помогло. Решение: В файле /bitrix/modules/main/install/mysql/install.sql замените строку


INDEX ix_module_to_module(FROM_MODULE_ID, MESSAGE_ID, TO_MODULE_ID, TO_CLASS, TO_METHOD)  
  
# на  
  
INDEX ix_module_to_module(FROM_MODULE_ID(20), MESSAGE_ID(20), TO_MODULE_ID(20), TO_CLASS(20), TO_METHOD(20))  

В комментариях к решению был совет, который мне помог. Цитата:

INDEX ix_module_to_module в файле install.sql уже был прописан правильно.
Открыл консоль, и выяснил, что при нажатии на «Исправить» в ответе от site_checker.php возвращались ворнинги PHP. Из-за них ответ не распознавался и выводилась ошибка «Ошибочный ответ сервера. Не удалось завершить тестирование».

Нужно смотреть по логам php какие возникают ошибки и исправлять. Вероятнее всего есть какие-то некорректные объявления в файле dbconn.php.

После этого всего были установлены последние доступные обновления Битрикс и сделана резервная копия всего проекта. Последним штрихом стала смена версии СУБД MySQL на 8 версию — единственную, которую предлагал хостинг nic.ru на тот момент. После смены не плохо опять пройтись по пунктам проверки сайта, субд и прочим встроенным оптимизациям.

Повышение безопасности сайта на Bitrix

После процедуры тотального обновления в консоли администрирования сайта был немедленно обнаружен и задействован механизм повышения безопасности сайта. Находится он в меню «Настройки \ Проактивная защита». Здесь необходимо включить монитор проактивной защиты, затем запустить сканер безопасности и закрыть все выявленные им уязвимости. Каждый выявленный пункт сопровождается инструкцией «Что делать?».

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

Оцените статью
Добавить комментарий

Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.