Сайт на Битриксе крутился на виртуальном сервере хостинга Timeweb в виртуальной среде, управляемой Bitrix virtual appliance 7.5.2.
PHP 7.4
Версия Битрикса 21.100.0 или что-то типа этого.
Потребовалось обновит Битрикс до версии 23.850.0
С версией PHP 7.4 в админке — Marketplace — ‘Обновление платформы’ удалось обновиться до версии 23.300.100. Дальнейшее обновление требовало обновления PHP.
В админке хостинга сделал резервную копию и снапшот.
Вошел в консоль системы. Автоматически запустилось Bitrix virtual appliance (при необходимости запускается командой /root/menu.sh).
Для обновления PHP выбираем в меню 1 — 8 — all — 1 (для PHP 8.1) Проверка результата выполнения задачи обновления в пункте 10 (Background pool tasks) первого уровня меню. Почему-то очень часто с первого раза задача завершается ошибкой. Мне удалось сначала обновиться до 8.0, хотя можно перепрыгнуть сразу с 7.4 на 8.1.
Под PHP 8.0 сайт не запустился. Выдал ошибку:
[Error]
Undefined constant "ITARNCEY_MODULE_ID" (0)
/home/bitrix/www/bitrix/modules/itargency.science/parametrs.php:5
#0: include_once
/home/bitrix/www/bitrix/modules/itargency.science/classes/general/ITscience.php:14
#1: require_once(string)
/home/bitrix/www/bitrix/modules/main/lib/loader.php:366
#2: Bitrix\Main\Loader::autoLoad
#3: class_exists
/home/bitrix/www/bitrix/modules/main/classes/general/module.php:481
#4: ExecuteModuleEventEx
/home/bitrix/www/bitrix/modules/main/include.php:185
#5: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:19
#6: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog.php:10
#7: require_once(string)
/home/bitrix/www/bitrix/header.php:1
#8: require(string)
/home/bitrix/www/index.php:2
В трех модулях PHP обнаружились используемые необъявленные константы ITARNCEY_MODULE_ID и BX_CAT_CRON:
/home/bitrix/www/bitrix/modules/itargency.science/classes/general/ITscience.php
\home\bitrix\www\bitrix\modules\onesite.study\classes\general\oneStudy.php
\home\bitrix\www\bitrix\modules\prymery.seopage\classes\general\PRseopage.php
ITARNCEY_MODULE_ID заменил на PRYMERY_MODULE_ID, объявленную в начале модуля.
В строках, использующих необъявленную BX_CAT_CRON выполнил такую замену:
if(strpos(self::REQUEST_URI(),'/bitrix/')===false && BX_CAT_CRON !== true ) заменил на
if(strpos(self::REQUEST_URI(),'/bitrix/')===false && ( defined('BX_CAT_CRON') ? constant('BX_CAT_CRON') : false) !== true )
После исправления ошибок в админке удалось обновить Битрикс до 23.500.200.
Затем в Bitrix virtual appliance обновил PHP до 8.1, а в админке Битрикс обновления не появились.
Заглянул в Marketplace — Обновление платформы — Журнал обновлений и увидел там запись:
Updated: landing (23.850.0) 2023-10-05 17:12:32 Успешно
Можно считать задачу выполненной.