Обновление PHP на Битрикс с 8.2 до 8.5 – кейс NorthRelay

VOZNINET · ТЕХНИЧЕСКИЙ КЕЙС
NorthRelay · октябрь 2026

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

1С-Битрикс
Аспро Приорити
PHP-FPM и cron
Подготовленный откат
8.5.12PHP для сайта и cron
754пройденных теста модулей
16контрольных адресов с HTTP 200
5сценариев проверки WebP
Переход сайта NorthRelay на Битрикс с PHP 8.2.20 на PHP 8.5.12

Обновление выполнили на прежнем сервере. Все пять иллюстраций можно открыть в полном размере.

01 · Задача и ограничения

Сайт на Битрикс с обновлённым ядром и старыми доработками

NorthRelay – сайт оборудования и решений для мобильной связи и интернета. В проекте работают каталог, страницы услуг, информационные разделы и собственные обработчики. Основа сайта – «1С-Битрикс» и решение «Аспро: Приорити».

Задача состояла в переходе с PHP 8.2.20 на PHP 8.5.12 в пределах существующего сервера. Нужно было сохранить работу страниц, подключение к базе данных, сессии, обработку изображений и запуск фоновых заданий. Для возврата к прежней конфигурации требовалось заранее подготовить резервные копии и порядок отката.

Компонент Исходное состояние Значение для проекта
Сервер CentOS 7, x86_64 Работа в пределах существующей операционной системы.
Окружение BitrixEnv 7.5.5 Серверные инструменты используют системные настройки и программы.
Веб-сервер Nginx и Apache Страницы обрабатывались модулем PHP внутри Apache.
PHP 8.2.20 Нужно проверить веб-запросы и запуск из командной строки отдельно.
База данных MySQL-совместимый сервер 5.7.44 Сохранить подключение; тестовую копию разместить в отдельной БД.
Приложение Битрикс, Аспро и собственный код Совместимость зависит от конкретных компонентов и доработок.

Наличие обновлённого ядра CMS не означало, что весь проект готов к новой версии PHP. В шаблонах и вспомогательных библиотеках оставались конструкции, которые требовали отдельной проверки. Поэтому начали с инвентаризации окружения и кода.

02 · Решение по архитектуре

Новую версию PHP подготовили рядом с действующей

PHP использовался несколькими независимыми процессами. Веб-запросы проходили через Apache, задания cron вызывали отдельный исполняемый файл, а инструменты BitrixEnv опирались на системное окружение. Замена системного PHP затронула бы все эти зависимости одновременно.

Мы выбрали параллельную установку. Для PHP 8.5.12 подготовили отдельный каталог, конфигурацию, библиотеки, службу PHP-FPM и журналы. Системный PHP 8.2.20 сохранили для существующих серверных инструментов. Это позволило собирать и проверять новое окружение до переключения рабочего сайта.

ВЕБ-ЗАПРОСЫ

Nginx → Apache → PHP-FPM

После переключения Apache передаёт выполнение PHP отдельному процессу PHP-FPM 8.5.12.

ФОНОВЫЕ ЗАДАНИЯ

Cron → PHP 8.5.12

В расписании явно задаются новая версия PHP и её конфигурация.

СЕРВЕРНЫЕ ИНСТРУМЕНТЫ

Системный PHP 8.2.20

Сохраняется отдельный интерпретатор для инструментов действующего окружения.

Архитектура сайта до и после перехода с модуля Apache на PHP-FPM 8.5

Версию PHP проверяли отдельно для веб-сервера, планировщика и системной командной строки.

03 · Подготовка

Резервные копии и отдельное тестовое окружение

Зафиксировали версии программ, состав расширений, настройки PHP, Nginx и Apache, состояние служб и доступное место на диске. Сохранили конфигурации, архив файлов сайта и дамп базы данных. Проверили читаемость архивов и контрольные суммы.

Затем подготовили копию сайта с отдельной тестовой базой и отдельной учётной записью. Проверили импорт данных и права, необходимые для создания структуры таблиц. Исправления совместимости сначала применяли к тестовой копии, сохраняя исходные файлы.

Для выполнения PHP использовали отдельную тестовую службу. Проверяли не только запуск интерпретатора, но и прохождение запроса через веб-сервер, подключение защитного пролога Битрикс и загрузку нужного файла настроек.

Этапы обновления PHP с резервной копией, проверкой совместимости и подготовкой отката

К каждой операции готовили проверяемые условия выполнения. Несовпадение ожидаемого состояния останавливало следующий шаг.

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

04 · Сборка окружения

Совместимые библиотеки и нужные сайту расширения

На существующем сервере новая версия PHP потребовала подготовки зависимостей. Собрали необходимые библиотеки, настроили загрузку их из отдельного каталога и проверили, какие версии реально использует PHP. В состав работ вошли OpenSSL, zlib, libssh2, cURL, XML-библиотеки и графические зависимости.

Проверили возможности работы с MySQL, HTTPS-запросами, многобайтовыми строками, XML, ZIP-архивами и изображениями. Для сайта важна была поддержка JPEG, PNG и WebP, а также обработка изображений средствами GD.

ОШИБКА ОКРУЖЕНИЯ ТЕСТОВ

Проверка документации libssh2

Тест страниц руководства падал из-за настроек кодировки. Установили недостающий инструмент форматирования и запустили проверку в локали UTF-8. Оба теста выбранного набора libssh2 завершились успешно.

ГРАФИЧЕСКАЯ БИБЛИОТЕКА

Повторная сборка GD

После неудачных графических тестов изменили конфигурацию сборки на встроенную GD с нужными форматами. Проверили зависимости и повторили тесты GD, cURL и OpenSSL.

Ошибки разбирали по журналам конкретного этапа. Успешная компиляция сама по себе ещё не подтверждала, что нужные расширения работают с корректными библиотеками.

05 · Проверка сборки

754 успешных теста GD, cURL и OpenSSL

После исправлений выполнили выбранный набор тестов модулей PHP. Все выполненные тесты прошли. Пропущенные проверки учтены отдельно и не включены в число успешных.

Выполненные тесты754 / 754
Выбранный набор содержал 888 тестов. Из них 134 были пропущены тестовой системой.
754 пройдено134 пропущено0 ошибок
Показатель Результат
Всего в выбранном наборе 888
Выполнено успешно 754
Пропущено тестовой системой 134
Ошибки и предупреждения тестовой системы 0 ошибок, 0 предупреждений

754 – число проверок модулей PHP. Оно не относится к количеству страниц, заявок или платежей. Проверки приложения и рабочего переключения выполнялись следующим этапом.

06 · Совместимость приложения

Четыре точечных исправления в коде проекта

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

Участок кода Найденная проблема Исправление
Компонент производителей Недопустимая запись в $GLOBALS[]. Удалили лишнюю операцию. Именованный фильтр связанных товаров сохранили.
Платёжный обработчик Тип параметра допускал null неявно. Явно указали допустимость null в сигнатуре метода.
Шаблон комментариев Параметры со значениями по умолчанию стояли перед обязательными. Согласовали объявление функции с фактической передачей аргументов.
LESS-компилятор Аспро В конструкции case использовалась устаревшая форма с точкой с запятой. Заменили разделитель на двоеточие.

Проверка новой среды также обнаруживает старые дефекты, которые проявлялись лишь на отдельных маршрутах. Например, ограничение записи в $GLOBALS существовало до PHP 8.5. Поэтому причины ошибок отделяли от самого факта обновления.

Такой же подход к поиску причины использовали в кейсе расследования ошибки 503 на WordPress. В обоих проектах изменения опирались на наблюдаемую ошибку и проверку результата.

07 · Рабочее переключение

Проверили PHP через веб-сервер и повторили запросы к сайту

Перед переключением записали ответы контрольных страниц на PHP 8.2.20. Затем подключили Apache к новой службе PHP-FPM и проверили фактическую среду выполнения веб-запроса. Это было важно, потому что версия PHP в терминале может отличаться от версии, которая обслуживает сайт.

Рабочий запрос подтвердил PHP 8.5.12 и режим FPM/FastCGI. Отдельно проверили подключение к базе данных, совместимость сессии, защитный пролог и используемую конфигурацию. После этого повторили контрольный обход сайта.

Подтверждённые результаты перехода на PHP 8.5.12, проверки базы данных, сессий и 16 адресов

Сводка составлена по протоколам проверок сборки и рабочего переключения.

Проверка Полученный результат
PHP, обслуживающий сайт 8.5.12, FPM/FastCGI
Подключение к базе и сессии Проверки пройдены
Защитный пролог и файл настроек Подключены ожидаемые файлы
16 контрольных адресов HTTP 200 до и после переключения
Несуществующий контрольный адрес HTTP 404
Попытки выполнения PHP в проверенных служебных каталогах HTTP 403
Новые записи в журнале PHP за контрольный прогон 0 байт

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

Границы проверки. HTTP 200 подтверждает ответ выбранной страницы. Проверка оформления заказа и реального платежа требует отдельных сценариев; такие операции не входят в приведённые 16 запросов.

08 · Фоновые задания

Cron перевели на PHP 8.5 и проверили реальный запуск

После переключения веб-запросов обнаружили, что в расписании Битрикс всё ещё указан системный PHP 8.2.20. Страницы уже обслуживала новая версия, а фоновое задание продолжало запускать прежний интерпретатор.

В команде cron явно указали PHP 8.5.12 и его файл настроек. Сохранили расписание и существующую блокировку, которая не допускает одновременный повторный запуск задания.

КОНФИГУРАЦИЯ

Проверили команду и пользователя

Задание использует нужный интерпретатор, конфигурацию и права пользователя сайта.

ФАКТИЧЕСКИЙ ЗАПУСК

Дождались срабатывания расписания

Зафиксировали процесс нового PHP с cron-скриптом Битрикс и соответствующие записи в журнале планировщика.

Наблюдение подтвердило, что планировщик использует новую команду. Оно не заменяет проверку каждого агента и каждой бизнес-операции внутри cron-скрипта.

09 · Найденный дефект

Обработчик WebP больше не передаёт пустой путь к файлу

При проверке журнала PHP обнаружили ValueError: Path must not be empty в собственном обработчике WebP. Если исходного JPG или PNG не было, переменная с путём оставалась пустой. Затем этот путь передавался в file_get_contents(), и обработчик завершался с ошибкой.

Добавили корректную проверку исходного файла и обработку запроса. Для отсутствующего изображения стал возвращаться HTTP 404. Для существующего исходника проверили преобразование в WebP, тип ответа и повторную выдачу готового файла.

Ответы исправленного обработчика WebP для существующего и отсутствующего изображения

Наличие исходного изображения проверяется до чтения и преобразования файла.

Сценарий запроса Результат
Прямое обращение к обработчику без изображения HTTP 404
Отсутствующий исходный файл HTTP 404
JPEG с параметрами в адресе HTTP 200 · image/webp
PNG с символом «+» в имени HTTP 200 · image/webp
Повторный запрос созданного WebP HTTP 200 · image/webp

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

10 · Последующие работы

После обновления привели в порядок видео и товарную разметку

После основного перехода продолжили проверку каталога. Эти исправления относятся к качеству страниц и данным для поисковых систем. Их результат учитываем отдельно от обновления PHP.

МЕДИАФАЙЛЫ

Отсутствующее видео

В карточке архивного товара обнаружили ссылку на отсутствующий ролик. Вместо неработающего проигрывателя вывели сообщение о временной недоступности видео. PDF-инструкцию сохранили.

ДАННЫЕ О ТОВАРАХ

Цена и наличие из карточки

Старый шаблон обрезал строку цены и всегда указывал наличие. Текст «Снята с производства» попадал в поле цены. Исправили формирование Product и Offer по фактическим данным.

НЕПОДТВЕРЖДЁННЫЕ ПОЛЯ

Убрали фиктивные значения

Удалили gtin13=FALSE и автоматически выдуманный срок действия цены. Для архивного товара без цены оставили разметку страницы и хлебные крошки.

ОПИСАНИЕ САЙТА

Организация и текстовые файлы

На главной добавили Organization и WebSite. Подготовили llms.txt и /.well-known/ai.txt; проверили их доступность по HTTP и текстовый тип ответа.

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

Исправленная разметка даёт поисковикам согласованные данные. Рост позиций, появление расширенных сниппетов или эффект от llms.txt и ai.txt по результатам этих работ не измерялись.

Цена и наличие – только часть товарных данных. Если покупатель не находит подходящую модель через поиск или фильтры, отдельно проверяют характеристики товаров, единицы измерения и пропуски в данных. Это помогает выяснить, какие сведения теряются между карточкой товара и поисковой выдачей магазина.

11 · Результат проекта

PHP 8.5.12 работает для сайта и фоновых заданий

NorthRelay переведён с PHP 8.2.20 на PHP 8.5.12 на прежнем сервере. Для веб-запросов настроен PHP-FPM, для фонового задания Битрикс – явный вызов новой версии PHP. Подготовлены конфигурации, журналы, резервные копии и команды возврата к прежнему состоянию.

Область Подтверждённый итог
Среда выполнения PHP 8.5.12 для сайта и его задания cron
Совместимость Четыре исправления в компонентах и библиотеке проекта
Сборка PHP 754 выполненных теста пройдены, 134 пропущены, 0 ошибок
Доступность выбранных страниц 16 адресов отвечают HTTP 200 после переключения
Изображения Пять HTTP-сценариев WebP пройдены
Завершение работ Тестовые службы остановлены, резервные копии и порядок отката сохранены

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

Операционная система требует отдельного обслуживания. CentOS 7 осталась прежней; её стандартная поддержка завершилась 30 июня 2024 года. Обновление PHP не продлевает поддержку ОС. Отдельно собранные библиотеки и PHP также нужно сопровождать и обновлять.

12 · Вопросы об обновлении PHP

Что важно учесть перед переходом на PHP 8.5

Можно ли обновить PHP на Битрикс на действующем сервере?

В этом проекте мы выполнили переход на прежнем сервере с отдельной установкой PHP. Возможность повторить такой подход зависит от ОС, библиотек, CMS и доработок. Решение принимается после инвентаризации и проверки на тестовой копии.

Почему проверка php -v не подтверждает обновление сайта?

Команда показывает версию PHP, доступную в конкретной командной строке. Веб-сервер может использовать другой модуль или PHP-FPM. Поэтому мы проверяли версию через рабочий веб-запрос, а затем отдельно проверяли cron.

Зачем сохранили PHP 8.2.20?

Он остался для существующих серверных инструментов. Веб-запросы и фоновое задание Битрикс были явно направлены на PHP 8.5.12. Такое разделение позволило управлять переходом каждого процесса отдельно.

Что именно означают 754 успешных теста?

Это выполненные проверки выбранного набора GD, cURL и OpenSSL. Всего набор содержал 888 тестов, из которых 134 были пропущены. Это не число протестированных страниц или операций пользователей.

Все найденные ошибки появились из-за PHP 8.5?

Нет. Часть изменений связана с требованиями новых версий PHP, часть – со старыми дефектами компонентов. Например, запись в $GLOBALS без имени элемента и чтение файла по пустому пути требовали исправления независимо от формулировки задачи обновления.

Достаточно ли HTTP 200, чтобы считать весь сайт проверенным?

Ответ HTTP 200 подтверждает доступность адреса в момент запроса. Дополнительно мы проверяли среду выполнения, базу данных, сессии, защитные ограничения и WebP. Заказы, платежи и другие бизнес-операции требуют собственных контрольных сценариев.

Даст ли переход на PHP 8.5 рост позиций и продаж?

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

Как определяется объём похожей работы?

Сначала изучают окружение, версию Битрикс, шаблон, доработки, расширения PHP и фоновые задания. Затем проверяют копию сайта и составляют план переключения. От этих результатов зависят трудоёмкость, сроки и состав проверок.

ОТ ПРОВЕРКИ К ВНЕДРЕНИЮ

Нужно обновить PHP на работающем сайте?

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