-10%Переходите к нам от другого подрядчика — дадим скидку на первый этап работ

Миграция сайта на 1С-Битрикс на PHP 8: совместимость, тестирование, ускорение

Миграция сайта на 1С-Битрикс на PHP 8: проверка совместимости, тестовый контур и рост производительности

Сайт годами работал на PHP 7.4, а теперь хостинг предупреждает о снятии поддержки, антивирус модуля проактивной защиты подсвечивает устаревшее окружение, а новые версии ядра и модулей Маркетплейса всё чаще требуют PHP 8. Переход назрел, но пугает: «а вдруг после переключения версии половина каталога отвалится, перестанет ходить обмен с 1С, а оформление заказа выдаст белый экран». Страх обоснованный — но управляемый. Миграция на PHP 8 — это не «нажать кнопку на хостинге», а последовательность проверок, при которой сюрпризов почти не остаётся.

Ниже — практический разбор миграции сайта на 1С-Битрикс на PHP 8: какие версии поддерживает актуальное ядро, где реально спрятан выигрыш в скорости, как пользоваться встроенной «Проверкой совместимости», какие изменения языка чаще всего ломают код и в каком порядке безопасно доводить всё до прода с возможностью отката. Это выжимка из наших проектов по поддержке и сопровождению сайтов на 1С-Битрикс — без теории ради теории, только то, что реально влияет на исход миграции.

Коротко

  • Актуальное ядро Битрикса рассчитано на PHP 8.1–8.2; какую версию ставить — сверяйтесь с модулем «Проверка системы».
  • Реальный выигрыш даёт движок PHP 8 и правильно настроенный opcache, а не JIT — для веб-кода Битрикса JIT почти не помогает.
  • Ломается не ядро, а кастомный код, старые компоненты и шаблоны: create_function, each, фигурные скобки строк, строгие типы.
  • Мигрируйте по шагам: тестовый контур → фикс кода → нагрузочное тестирование → прод, с заранее продуманным откатом на 7.4.
  • После переключения обязателен регресс каталога, оформления заказа и обмена с 1С.

Зачем переходить на PHP 8

У миграции на PHP 8 три движущих мотива, и все они практические, а не «чтобы было по-модному».

Безопасность и поддержка. Старые ветки PHP рано или поздно перестают получать обновления безопасности. Для сайта, который принимает оплату и хранит персональные данные клиентов, работа на версии без патчей — это не абстрактный, а вполне конкретный риск. Хостинги и без того всё активнее выводят из эксплуатации 7.x, и рано или поздно вопрос встанет ребром — лучше решить его планово, чем в аварийном режиме, когда провайдер отключит старую версию по расписанию.

Совместимость с новыми версиями ядра и модулей. 1С-Битрикс развивается, и свежие обновления главного модуля, а также многие продукты Маркетплейса, всё чаще проектируются под PHP 8. Оставаясь на 7.4, вы постепенно упираетесь в потолок: часть обновлений уже не встанет, часть решений из Маркетплейса не установится. Миграция на PHP 8 снимает этот потолок и открывает путь к актуальным версиям.

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

Важно: миграция на PHP 8 и обновление ядра Битрикса — две разные задачи, которые лучше не сваливать в один заход. Сначала приведите ядро и модули к версиям с поддержкой PHP 8 (это отдельная тема — см. материал про безопасное обновление Битрикса), и только потом отдельным шагом переключайте версию PHP.

Какие версии PHP поддерживает Битрикс

Первый вопрос любой миграции — «на какую версию переходить». Ответ зависит не от общих статей в интернете, а от конкретного состояния вашего ядра, поэтому единственный надёжный источник — встроенная проверка системы в админке. Тем не менее есть устойчивые ориентиры.

Актуальные редакции «1С-Битрикс: Управление сайтом» рассчитаны на работу под PHP 8.1 и 8.2. Ветка 7.4 ещё поддерживается многими проектами, но считается уходящей: новых улучшений под неё нет, а обновления безопасности самого PHP для неё уже прекращены. Ветки старше 7.4 (7.1–7.3, а тем более 5.x) для актуального ядра неприемлемы. Практический смысл такой:

Отдельно стоит учесть редакцию и её модули. Магазину на «Малом бизнесе» или «Бизнесе» важно, чтобы не только главный модуль, но и модули торгового каталога, интернет-магазина, обмена с 1С были обновлены до версий, где заявлена поддержка выбранной ветки PHP. Именно поэтому перед сменой версии PHP почти всегда идёт этап обновления ядра и модулей — рассинхрон «свежий PHP, старое ядро» ведёт к ошибкам в самой платформе.

Совет: не гонитесь за самой новой версией PHP. Цель миграции — уйти со снятой с поддержки ветки на стабильную и поддерживаемую, а не поставить рекорд по номеру версии. PHP 8.1 закрывает задачи безопасности и производительности с наименьшим числом правок.

Выигрыш производительности: opcache и JIT

Вокруг скорости PHP 8 много мифов, поэтому разложим по полочкам, откуда на самом деле берётся ускорение и где его ждать не стоит.

Движок и opcache — основной источник выигрыша. В PHP 8 переработан внутренний движок (в частности, за счёт компиляции байткода в более эффективную форму), а связка с opcache даёт кумулятивный эффект. Opcache — это кэш скомпилированного байткода: он избавляет PHP от повторного разбора и компиляции одних и тех же файлов на каждом запросе. Для Битрикса, где на страницу подключаются сотни файлов ядра и компонентов, это критично. Правильно настроенный opcache сам по себе даёт больший прирост, чем любые «магические» директивы.

JIT — не серебряная пуля для веб-кода. JIT (Just-In-Time компиляция) переводит горячий байткод в машинный код прямо во время выполнения. Это отлично работает для «числодробилок» — тяжёлых математических циклов, обработки изображений, шифрования. Но типичная страница магазина на Битриксе почти всё время проводит не в вычислениях, а в ожидании ответа от базы данных и в операциях ввода-вывода. На такой нагрузке JIT добавляет считаные проценты, а иногда наоборот вносит нестабильность и лишний расход памяти. Поэтому базовая рекомендация: opcache — включаем и настраиваем всегда, JIT — рассматриваем точечно и только с замерами.

МеханизмЧто ускоряетЭффект для Битрикса
Движок PHP 8Общую обработку кодаОщутимый: 15–25% на том же коде
opcacheКомпиляцию файлов (кэш байткода)Критично важный, обязателен
opcache preloadingПредзагрузку классов в памятьПолезен, но требует аккуратной настройки
JITГорячие вычислительные циклыМал для веба, полезен для расчётов

Насколько именно ускорится ваш сайт — вопрос замеров, а не веры. На одном проекте прирост будет 15%, на другом — 30%, потому что всё зависит от доли времени, которое код проводит в PHP против базы. Поэтому в план миграции обязательно закладывают контрольные замеры «до» и «после»: время генерации ключевых страниц, число и длительность SQL-запросов, потребление памяти. Без цифр «стало быстрее» — это ощущение, а не результат, которым можно управлять. Тему производительности базы, которая часто оказывается настоящим узким местом, мы разбираем в отдельном материале про оптимизацию базы MySQL в Битриксе.

Время генерации страницы каталога, мс ~280 мс PHP 7.4 ~205 мс PHP 8.2 + opcache Цифры условные: реальный прирост измеряйте на своём проекте
Схема: основной выигрыш даёт связка нового движка PHP 8 и настроенного opcache; конкретные значения всегда нужно мерить на своём каталоге.

Проверка совместимости в самом Битриксе

Хорошая новость: значительную часть работы по проверке готовности к PHP 8 Битрикс делает за вас — надо только знать, где смотреть. В платформе есть несколько встроенных инструментов, и грамотная миграция начинается именно с них, а не с переключения версии на хостинге.

Модуль «Проверка системы» (Проверка сервера). Находится в административной части и показывает окружение глазами Битрикса: версию PHP, установленные и недостающие расширения, лимиты памяти и времени выполнения, права на файлы, параметры базы. Это первое, что нужно открыть: инструмент сразу скажет, каких PHP-модулей не хватает для нормальной работы и не упирается ли что-то в устаревшие настройки.

«Проверка совместимости с PHP». Отдельный инструмент, который сканирует ядро и (в ряде конфигураций) код проекта на использование устаревших и удалённых конструкций языка. Он формирует отчёт с перечнем потенциально проблемных мест: где встречаются снятые функции, устаревшие вызовы, конструкции, которые в новых версиях PHP работают иначе. Этот отчёт — карта того, что предстоит проверить и починить.

Отчёты и логи. В процессе миграции незаменимо журналирование ошибок. Битрикс умеет собирать исключения и ошибки в журнал событий, а на уровне PHP включается запись в лог-файл. На тестовом контуре имеет смысл выкрутить уровень логирования пожёстче, чтобы ловить не только фатальные ошибки, но и deprecated-предупреждения — именно они предупреждают о том, что «пока работает, но скоро сломается».

  1. Откройте «Проверку системы». Зафиксируйте текущую версию PHP, недостающие расширения и упирающиеся лимиты. Это стартовая точка миграции.
  2. Запустите «Проверку совместимости с PHP». Получите отчёт по устаревшим конструкциям в ядре и коде. Выгрузите или сохраните его — это ваш план правок.
  3. Проверьте статус обновлений. Убедитесь, что главный модуль и ключевые модули (каталог, интернет-магазин, обмен с 1С) обновлены до версий с поддержкой целевой ветки PHP.
  4. Включите подробное логирование на тесте. Настройте запись ошибок и deprecated-уведомлений в лог, чтобы ловить проблемы при прогоне сценариев.
Важно: «Проверка совместимости» отлично ловит проблемы в ядре и типовых конструкциях, но не гарантирует, что найдёт всё в сложном кастомном коде. Автоматический отчёт — это фундамент, а не финальная гарантия: его обязательно дополняет ручной прогон сценариев на тестовом контуре с включёнными логами.

Ломающие изменения PHP 8, о которых надо знать

Чтобы понимать отчёты о совместимости и осмысленно чинить код, полезно держать в голове набор изменений, которые в PHP 8 чаще всего ломают старые проекты. Разберём главные.

Удалённые функции. В PHP 8 окончательно исчезли конструкции, которые давно были помечены устаревшими. Самые болезненные для старого кода Битрикса:

Фигурные скобки для доступа к строкам и массивам. Синтаксис вида $str{0} для получения символа строки удалён — нужно использовать квадратные скобки $str[0]. Это одна из самых частых мелких правок в старых шаблонах и компонентах.

Более строгая типизация и ошибки вместо предупреждений. PHP 8 стал строже: многие ситуации, которые раньше давали «тихий» warning или notice и код всё равно как-то работал, теперь превращаются в ошибки уровня TypeError или Error. Типичные случаи — передача аргумента неверного типа во внутреннюю функцию, обращение к методу на null, несоответствие объявленным типам. Код, который «жил» на предупреждениях, в PHP 8 падает по-настоящему.

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

Изменения в сравнении строк и чисел. PHP 8 изменил правила нестрогого сравнения между строкой и числом. Раньше выражение вроде 0 == "abc" давало true (строка приводилась к числу 0), теперь — false (число приводится к строке). Это тонкое изменение способно поменять поведение старых условий и проверок, особенно в самописной валидации и фильтрах.

Изменения в поведении функций. Ряд встроенных функций стал строже относиться к аргументам и возвращаемым значениям; некоторые перестали «прощать» неверный тип и вместо false бросают исключение. Всё это выявляется прогоном сценариев с логами, а не чтением документации наизусть.

Что было в PHP 7Что стало в PHP 8Как чинить
create_function(...)УдаленаЗаменить анонимной функцией function() {…}
each($arr)УдаленаПереписать на foreach
$str{0}Синтаксис удалёнИспользовать $str[0]
0 == "abc" → true→ falseПриводить типы явно, строгое сравнение
Warning при неверном типеTypeErrorПроверять и приводить типы аргументов
Что ломает старый код при переходе на PHP 8 Удалённые функции create_function(), each(), устаревшие алиасы Синтаксис строк $str{0} удалён → только $str[0] Строгая типизация Warning → TypeError, неинициализированные переменные Сравнения строк и чисел 0 == "abc" теперь false, меняется логика условий
Схема: четыре главные категории изменений PHP 8, из-за которых падает старый кастомный код и шаблоны.

Кастомный код, модули Маркетплейса и шаблоны

Ключевая мысль всей миграции: само ядро Битрикса к PHP 8 готовят разработчики платформы — если оно обновлено, оно поедет. Рвётся почти всегда то, что делали не они: ваш кастомный код, сторонние модули и старые шаблоны. Разберём три очага риска.

Кастомный код. Это правки в init.php, обработчики событий, самописные компоненты и классы, вспомогательные скрипты, интеграции. Именно здесь чаще всего живут create_function(), обращения к неинициализированным переменным, неявные приведения типов. Такой код никто, кроме вас, не проверял на совместимость — его придётся прогонять и чинить вручную.

Старые модули Маркетплейса. Решения из Маркетплейса бывают разного возраста и качества. Свежие и поддерживаемые авторы обновляют под PHP 8, но заброшенные или очень старые модули могут содержать удалённые конструкции. По каждому стороннему модулю нужно проверить: есть ли обновление с поддержкой PHP 8, поддерживается ли он вообще, и что делать, если автор пропал. Иногда выгоднее заменить брошенный модуль на аналог, чем чинить чужой необновляемый код.

Шаблоны сайта и компонентов. Кастомные шаблоны дизайна и переопределённые шаблоны компонентов (в папках local или bitrix/templates) — это тоже PHP-код, часто написанный давно. Здесь встречаются и фигурные скобки для строк, и устаревшие вызовы, и логика, завязанная на старое поведение сравнений. Шаблоны нужно прогонять на реальных страницах: каталог, карточка товара, корзина, оформление заказа, личный кабинет.

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

Отдельно стоит сказать про качество самой проверки. Автоматический отчёт совместимости хорошо ловит явные вещи (удалённые функции), но плохо видит логические изменения — например, что старое условие с нестрогим сравнением теперь ведёт себя иначе. Такие вещи ловятся только прогоном бизнес-сценариев и тестами. Как выстроить тестирование магазина системно, мы разбираем в материале про тестирование и QA магазина на Битриксе.

Порядок миграции: от теста до прода

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

  1. Тестовый контур. Разворачиваем копию сайта в окружении с целевой версией PHP 8. Прод при этом продолжает жить на 7.4 и ничего не замечает.
  2. Фикс кода. Прогоняем сценарии на тесте, собираем ошибки из логов и отчёта совместимости, чиним кастом, модули и шаблоны до «зелёного» состояния.
  3. Нагрузочное тестирование. Убеждаемся, что под нагрузкой сайт не только не падает, но и работает быстрее; замеряем метрики и сравниваем с 7.4.
  4. Прод. Переключаем версию PHP на боевом сайте в окно низкой нагрузки, с готовым откатом и снятой резервной копией, затем прогоняем регресс.

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

1. Тестовый контур 2. Фикс кода 3. Нагрузочное тестирование 4. Прод + откат наготове Конвейер безопасной миграции
Схема: миграция идёт по конвейеру, и переход к следующему шагу возможен только после успешного прохождения предыдущего.

Тестовый контур: как собрать и не навредить

Тестовый контур — сердце безопасной миграции. Это отдельная копия сайта, где можно смело всё ломать и чинить, не трогая живых покупателей. Собрать его нужно так, чтобы он максимально повторял боевое окружение, иначе часть проблем «спрячется» до прода.

  1. Снимите полную копию. Файлы проекта и дамп базы данных с прода. Важно копировать целиком: и bitrix, и local, и upload, чтобы кастом и загруженные данные были на месте.
  2. Разверните на отдельном окружении. Поднимите копию на PHP 8 целевой версии — на отдельном домене, поддомене или в изолированном контейнере. Никаких общих с продом баз и файлов.
  3. Отключите «боевые» интеграции. На тесте нельзя допустить реальных списаний оплаты, отправки писем клиентам, боевого обмена с 1С в продуктивную базу. Переведите платёжки в тестовый режим, почту — на заглушку, обмен — на тестовую базу 1С.
  4. Синхронизируйте версии ядра и модулей. Тест должен идти на том же ядре, что планируется на проде. Проверять PHP 8 на устаревшем ядре бессмысленно.
  5. Включите подробное логирование. На тесте не жалко строгих настроек: пусть PHP пишет в лог все ошибки и предупреждения, включая deprecated. Здесь они — помощники, а не помеха.
Важно: самое опасное на тестовом контуре — случайно задеть прод: реальную базу 1С, боевую платёжку или живую рассылку. Перед первым прогоном сценариев отдельно проверьте, что все внешние интеграции переведены в тестовый режим и не бьют в продуктивные системы.

Фикс кода: как искать и чинить ошибки

Когда тестовый контур поднят, начинается основная работа — прогон сценариев и починка. Методика простая и предсказуемая.

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

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

Идите по логам. После каждого прогона открывайте лог ошибок PHP и журнал событий Битрикса. Fatal-ошибки чините в первую очередь — они рушат страницы. Deprecated-предупреждения — во вторую: они пока не ломают, но это долги, которые лучше закрыть сразу, пока контекст свеж.

Чините в правильном месте. Кастомный код правьте у себя. Ошибку в стороннем модуле — по возможности решайте обновлением модуля или обращением к автору, а не «горячей» правкой чужих файлов, которую снесёт следующее обновление. Никогда не правьте файлы ядра напрямую — используйте события и переопределения.

Фиксируйте изменения. Ведите все правки через систему контроля версий. Так вы всегда знаете, что и зачем поменяли, и сможете откатить конкретную правку, а не весь проект.

Настройка php.ini и opcache

Смена версии PHP — повод пересмотреть настройки. Значения по умолчанию редко оптимальны для магазина на Битриксе. Ключевые параметры делятся на две группы: базовые лимиты и настройки opcache.

Базовые лимиты php.ini. Битрикс требователен к ресурсам, и рекомендованные им значения нужно выставить осознанно:

ДирективаСмыслОриентир для магазина
memory_limitПамять на один процесс PHPОт 256M, часто выше на тяжёлом каталоге
max_execution_timeЛимит времени скриптаДостаточный для обмена и импорта
upload_max_filesize / post_max_sizeРазмер загрузокС запасом под каталог и файлы
opcache.enableВключение кэша байткодаОбязательно включён

Opcache — где прячется скорость. Именно настройки opcache дают большую часть выигрыша PHP 8, поэтому им стоит уделить отдельное внимание:

Про JIT ещё раз: в настройках opcache есть директивы JIT, но для веб-нагрузки Битрикса включать его по умолчанию не нужно. Если решаете попробовать — делайте это на тесте, под нагрузочным тестированием, и оставляйте только если замеры показывают реальную пользу без потери стабильности.

Нагрузочное тестирование перед продом

Сайт, который открывается без ошибок на тесте в один поток, — это ещё не сайт, готовый к проду. Под настоящей нагрузкой всплывают проблемы, невидимые в спокойном режиме: нехватка памяти под opcache, деградация на параллельных запросах, узкие места в базе, нестабильность при включённом JIT. Поэтому перед выходом на прод проводят нагрузочное тестирование.

Что важно проверить под нагрузкой:

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

Переключение прода и откат

Когда тест зелёный и нагрузочное тестирование пройдено, наступает самый ответственный момент — переключение боевого сайта. Здесь важна не смелость, а дисциплина.

  1. Выберите окно низкой нагрузки. Ночь или раннее утро, когда покупателей минимум, а обмен с 1С не идёт. Предупредите заинтересованных: маркетинг, менеджеров, того, кто ведёт обмен.
  2. Снимите свежую резервную копию. Файлы и база непосредственно перед переключением. Это ваша страховка, к которой можно вернуться в любой момент.
  3. Меняйте только версию PHP. Не совмещайте переключение PHP с обновлением ядра, правкой структуры базы или выкладкой новой функциональности. Одно изменение за раз — одна возможная причина, если что-то пойдёт не так.
  4. Переключите версию. Через панель хостинга или конфиг веб-сервера смените версию PHP на целевую. Заранее убедитесь, что откат на 7.4 выполняется одной операцией.
  5. Сразу прогоните регресс. Пройдите ключевые сценарии на живом сайте и загляните в логи. Тихих ошибок быть не должно.

Про откат. Безопасный откат — это не «план Б на случай катастрофы», а штатная часть процедуры, которую готовят заранее. Условие простое: вернуть версию PHP на предыдущую должно быть возможно быстро и без потерь. Именно поэтому на этапе переключения не меняют ничего, кроме версии PHP: если бы вы одновременно обновили ядро или изменили базу, откат PHP уже не вернул бы систему в прежнее состояние. Если после переключения всплывают критичные ошибки — возвращаете 7.4, сайт продолжает работать, а проблемы дочиняете на тесте и выходите на прод повторно.

Важно: договоритесь заранее, что считается поводом для отката (например, недоступность оформления заказа или обмена с 1С), а что можно быстро дочинить «на месте». Чёткий критерий отката снимает панические решения в момент, когда что-то пошло не так.

Регрессионное тестирование каталога, заказов и 1С

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

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

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

Обмен с 1С. Запустите обмен на тесте и проверьте оба направления: выгрузку каталога из 1С на сайт (товары, цены, остатки, свойства) и передачу заказов с сайта в 1С. Убедитесь, что данные не теряются и не искажаются, что кодировки и типы обрабатываются верно. Обмен часто чувствителен к строгой типизации PHP 8 и изменениям в обработке строк.

ЗонаЧто проверяемПризнак проблемы
КаталогРазделы, фильтр, цены, остатки, поискПустые списки, ошибки шаблона, неверные счётчики
ЗаказыОформление, оплата, доставка, статусыБелый экран на шаге оплаты, несоздание заказа
Обмен с 1СВыгрузка каталога и передача заказовПотеря данных, ошибки типов, кракозябры
Личный кабинетВход, история заказов, повтор заказаОшибки авторизации, пустые данные

Чтобы понимать, как выглядит контроль версии PHP глазами платформы, полезно представлять экран «Проверки системы» — именно с него удобно начинать и им же подтверждать результат после переключения:

Проверка системы · Настройки PHP Версия PHP 8.2.x ✓ поддерживается opcache включён, память достаточна Расширения ✓ mbstring, pdo, gd, zip… memory_limit 256M Проверка совместимости с PHP Запустить проверку
Схема: экран «Проверки системы» показывает версию PHP, статус opcache и расширений; отсюда же запускается «Проверка совместимости». Реальные подписи зависят от версии платформы.

Реализация в 1С-Битрикс: что нажимать

Соберём конкретные точки в админке и на сервере, через которые проходит миграция, чтобы был понятен практический маршрут.

  1. Настройки → Инструменты → «Проверка системы». Смотрим текущую версию PHP, расширения и лимиты. Фиксируем стартовое состояние.
  2. «Проверка совместимости с PHP». Запускаем сканирование, получаем отчёт об устаревших конструкциях в ядре и коде. Отчёт становится планом правок.
  3. Marketplace → «Обновление платформы». Приводим главный модуль и модули (каталог, интернет-магазин, обмен с 1С) к версиям с поддержкой целевого PHP. Делаем это до смены версии PHP.
  4. Панель хостинга / конфиг веб-сервера. На тестовом контуре переключаем версию PHP на 8.x. На проде — только после успешного теста и нагрузки.
  5. php.ini / настройки PHP. Выставляем memory_limit, лимиты загрузок, включаем и настраиваем opcache (память, число файлов, проверка изменений).
  6. Журнал событий и лог ошибок PHP. После прогонов сценариев проверяем логи, чиним fatal-ошибки, затем deprecated. Повторяем до чистого лога.
  7. Обмен с 1С. На тесте гоняем обмен в обе стороны в тестовую базу, проверяем целостность данных. На прод выходим с уверенностью, что обмен переживёт смену версии.

Частые ошибки

Мини-FAQ. Обязательно ли чинить deprecated-предупреждения, если сайт и так работает? Строго — нет, они пока не ломают. Но это технический долг: в следующей версии PHP помеченное устаревшим станет удалённым и превратится в fatal. Дешевле закрыть их сейчас, пока вы уже в контексте миграции.

Чек-лист внедрения

Сведём всё в практический список, по которому удобно принимать готовность миграции перед выходом на прод:

  1. Целевая версия выбрана. По «Проверке системы» определена поддерживаемая ветка PHP (как правило, 8.1 или 8.2); ядро и модули обновлены под неё.
  2. Отчёт совместимости получен. «Проверка совместимости с PHP» запущена, устаревшие конструкции в ядре и коде выписаны в план правок.
  3. Тестовый контур собран. Полная копия сайта развёрнута на целевом PHP 8, боевые интеграции переведены в тестовый режим, логи включены.
  4. Кастом и модули починены. Кастомный код, старые модули Маркетплейса и шаблоны прогнаны и исправлены до чистого лога на ключевых сценариях.
  5. opcache настроен. Выделена достаточная память, поднят лимит файлов, включено кэширование; JIT либо выключен, либо оставлен только после замеров.
  6. Нагрузка пройдена. Нагрузочное тестирование подтвердило стабильность и прирост скорости против 7.4; opcache не переполняется.
  7. Откат готов. Снята резервная копия, проверено, что возврат на 7.4 выполняется одной операцией; определён критерий отката.
  8. Регресс на проде выполнен. После переключения проверены каталог, оформление заказа по всем способам оплаты и доставки, обмен с 1С; логи чистые.

Вывод

Миграция сайта на 1С-Битрикс на PHP 8 пугает ровно до тех пор, пока её пытаются сделать в один заход на боевом сайте. Разложенная на конвейер — тестовый контур, фикс кода, нагрузочное тестирование, прод с готовым откатом — она становится предсказуемой инженерной задачей. Ядро к PHP 8 готовят разработчики платформы, ваша зона ответственности — кастомный код, старые модули и шаблоны, а инструменты «Проверка системы» и «Проверка совместимости» подсказывают, где искать. Настройте opcache под размер проекта, не гонитесь за JIT без замеров, обязательно прогоните регресс каталога, заказов и обмена с 1С — и переход подарит сайту не только актуальную поддержку и безопасность, но и ощутимую прибавку в скорости.

Частые вопросы

Какую версию PHP поддерживает актуальный 1С-Битрикс?

Современные редакции ядра «1С-Битрикс: Управление сайтом» рассчитаны на работу под PHP 8.1 и 8.2, при этом ветка 7.4 постепенно уходит из поддержки. Опираться нужно не на общие слухи, а на встроенный модуль «Проверка системы»: он показывает, какая версия установлена, и подсвечивает несовместимые расширения. Рекомендуемой чаще всего называют PHP 8.1 как самый обкатанный вариант, а 8.2 — как более быстрый, но требующий чуть более свежего ядра и обновлённых модулей Маркетплейса.

Насколько PHP 8 быстрее PHP 7.4 на реальном сайте Битрикса?

На типовом интернет-магазине переход с 7.4 на 8.1–8.2 даёт прирост скорости обработки PHP-кода порядка 15–25% при прочих равных, а на тяжёлых страницах каталога и в админке эффект бывает заметнее. Основной выигрыш даёт улучшенный движок и оптимизированный opcache, а не JIT: для типичного веб-кода Битрикса, который упирается в базу и ввод-вывод, JIT добавляет немного и иногда его выгоднее держать выключенным. Реальную цифру всегда нужно мерить на своём проекте под нагрузкой, а не брать из чужих бенчмарков.

Что чаще всего ломается при переходе Битрикса на PHP 8?

Ломается не ядро (его обновляют вместе с проверкой на совместимость), а кастомный код, старые компоненты и шаблоны. Самые частые причины: удалённые функции create_function() и each(), фигурные скобки для доступа к символам строки, более строгая типизация аргументов, изменения в поведении сравнения строк и чисел, а также обращения к несуществующим ключам массива и свойствам объектов, которые в PHP 8 стали ошибками, а не «тихими» warning. Всё это выявляется прогоном тестового контура и включённым логированием ошибок.

Нужно ли включать JIT в PHP 8 для Битрикса?

Для большинства сайтов на 1С-Битрикс JIT не обязателен и не даёт заметного ускорения, потому что нагрузка веб-приложения приходится на работу с базой данных и вводом-выводом, а не на «числодробилку». Гораздо важнее правильно настроить opcache: выделить достаточно памяти, поднять лимит файлов и включить кэширование. JIT стоит рассматривать точечно — например, для тяжёлых фоновых расчётов — и только после нагрузочного тестирования, чтобы убедиться, что он реально помогает, а не создаёт нестабильность.

Как безопасно откатиться, если после перехода на PHP 8 всё сломалось?

Безопасный откат закладывается заранее: миграцию делают на тестовом контуре, а на проде переключение версии PHP выполняют через панель хостинга или конфиг веб-сервера так, чтобы можно было вернуть 7.4 одной операцией. Перед переключением снимают резервную копию файлов и базы. Если после переключения всплывают критичные ошибки, версию PHP возвращают на предыдущую, сайт продолжает работать на старом окружении, а найденные проблемы дочиняют на тесте. Ключ к спокойному откату — не менять одновременно версию PHP и что-то ещё (ядро, модули, структуру базы).

Можно ли обновить ядро Битрикса и перейти на PHP 8 за один заход?

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

Поделиться:

Нужна миграция на PHP 8 без простоя и сюрпризов?

Соберём тестовый контур, проверим совместимость, починим кастом и старые модули, проведём нагрузочное тестирование и регресс, переключим прод с готовым откатом. Оценим объём работ по вашему проекту.

Услуга «Поддержка»

Редакция B2Bsite

Редакция студии B2Bsite. С 2014 года команда разрабатывает, обновляет и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс: мигрирует проекты на новые версии PHP, оптимизирует производительность и настраивает обмен с 1С для среднего и крупного бизнеса.

← Все статьи блога