
Перевод сайта на PHP 8: пошаговый план без простоев
Перевод сайта на PHP 8 безопасен, если сделать бэкап, проверить код на тестовой копии и обновить зависимости. Пошаговый план и список проблем.
Перевод сайта на PHP 8: как обновить версию и ничего не сломать
Чтобы перевести сайт на PHP 8, сделайте резервную копию, разверните тестовую копию сайта, проверьте код и зависимости на совместимость, исправьте найденные ошибки и только потом переключите версию в панели хостинга, оставив возможность быстрого отката.
PHP 8 вышел в ноябре 2020 года и с тех пор получил несколько обновлений: 8.1, 8.2, 8.3 и 8.4. Старые ветки 7.x и 8.0 уже сняты с поддержки, то есть уязвимости в них не закрываются. Ниже разберём, зачем переходить, что ломается при обновлении, какими инструментами искать проблемы и как выстроить безопасный процесс.
Зачем вообще переходить на PHP 8
Самая приземлённая причина — безопасность. Версия PHP, снятая с поддержки, перестаёт получать исправления уязвимостей. Если на сайте есть формы, личный кабинет или оплата, использовать такую версию — прямой риск для данных клиентов и репутации.
Вторая причина — совместимость. Разработчики CMS, плагинов и библиотек постепенно отказываются от старых версий PHP. Рано или поздно вы не сможете поставить обновление модуля, потому что он требует PHP 8. Чем дольше откладывать переход, тем больше накопится изменений, и тем дороже станет миграция.
Третья причина — скорость и удобство разработки. В PHP 8 появился JIT-компилятор, а сам движок получил много оптимизаций. Прирост зависит от кода: для сайтов на популярных CMS он обычно заметен, но не бывает кратным, потому что основное время часто уходит на запросы к базе данных.
Какие ветки PHP ещё получают исправления
Поддержка завершена в ноябре 2022 года. Уязвимости не закрываются.
Поддержка завершена в ноябре 2023 года. Подходит только как промежуточный шаг.
Только исправления безопасности. Пора планировать переход выше.
Разумный выбор для большинства сайтов прямо сейчас.
Даты уточняйте на официальном сайте php.net: график поддержки публикуется там.
Что нового в PHP 8 для разработчика и владельца сайта
PHP 8 принёс не только скорость. Язык стал строже и предсказуемее: многие ошибки, которые раньше молча игнорировались, теперь выбрасывают исключения. Для разработчика это плюс, потому что баги находятся раньше. Для владельца сайта это значит, что старый «рыхлый» код может начать падать.
Среди заметных нововведений: именованные аргументы, объединённые типы, выражение match, оператор nullsafe, продвижение свойств в конструкторе, атрибуты и удобные функции str_contains, str_starts_with, str_ends_with. В следующих версиях добавились перечисления (enum), readonly-свойства и другие инструменты для чистого кода.
Что даёт переход на PHP 8
- 01
Закрытые уязвимости: актуальные ветки получают исправления безопасности
- 02
Рост производительности за счёт оптимизаций движка и JIT
- 03
Совместимость с новыми версиями CMS, плагинов и библиотек Composer
- 04
Более строгая типизация: ошибки находятся на этапе разработки, а не у клиентов
- 05
Современный синтаксис, который упрощает поддержку и найм разработчиков
- 06
Меньше технического долга: каждое следующее обновление проходит легче
Что может сломаться при обновлении
Основные проблемы при переводе сайта на PHP 8 связаны с тремя вещами: удалёнными функциями, изменением поведения языка и устаревшими библиотеками. Самописный код, написанный лет десять назад, и старые плагины рискуют больше всего.
Отдельно стоит упомянуть предупреждения deprecated. Они не ломают сайт сразу, но сигнализируют, что в следующих версиях функциональность исчезнет. Если оставить их без внимания, переход на 8.3 или 8.4 снова превратится в аврал.
| Что изменилось | Версия | Что делать |
|---|---|---|
| Удалены create_function() и each() | 8.0 (удалено) | Заменить на анонимные функции и цикл foreach |
| Обращение к символу строки через $s{0} | 8.0 (удалено) | Использовать квадратные скобки: $s[0] |
| Сравнение строки и числа: 0 == «abc» теперь false | 8.0 (изменено поведение) | Применять строгое сравнение === и проверить условия |
| Передача null во встроенные функции для не-nullable параметров | 8.1 (deprecated) | Приводить значения к нужному типу, проверять на null |
| Динамические свойства классов | 8.2 (deprecated) | Объявить свойства явно или использовать #[AllowDynamicProperties] |
| Функции utf8_encode() и utf8_decode() | 8.2 (deprecated) | Перейти на mb_convert_encoding() |
Как найти проблемы до переключения
Искать несовместимости вручную в десятках тысяч строк кода бессмысленно. Для этого есть инструменты. Набор PHPCompatibility для phpcs сканирует проект и показывает конструкции, которые не работают в целевой версии. Статические анализаторы PHPStan и Psalm находят вызовы с неверными типами. Rector умеет автоматически переписывать устаревший код под новые версии.
Если проект работает на Composer, выполните команду composer why-not php 8.2: она покажет, какие пакеты мешают обновлению. Затем проверьте, есть ли у этих пакетов новые версии, а если нет — подберите замену.
Отдельное внимание уделите расширениям PHP. Убедитесь, что нужные модули (mysqli, gd, curl, mbstring, intl, imagick и другие) доступны для новой версии на вашем хостинге.
Пошаговый план перевода сайта на PHP 8
- 01
Сделайте инвентаризацию: узнайте текущую версию PHP, версию CMS, список плагинов, тем, модулей и подключённых Composer-пакетов.
- 02
Создайте полную резервную копию файлов и базы данных и проверьте, что её можно развернуть.
- 03
Разверните тестовую копию сайта на отдельном поддомене или сервере с той же конфигурацией, но с целевой версией PHP. Закройте её от индексации в Яндексе и Google.
- 04
Обновите ядро CMS, плагины, темы и библиотеки до версий, которые заявляют поддержку PHP 8.
- 05
Запустите статический анализ (PHPCompatibility, PHPStan, Rector) и исправьте найденные несовместимости.
- 06
Включите отображение всех ошибок и предупреждений на тестовой копии и пройдите сайт по сценариям: формы, корзина, оплата, личный кабинет, поиск, фильтры, админка.
- 07
Выберите время с минимальным трафиком и переключите версию PHP в панели хостинга. Оставьте предыдущую версию доступной для быстрого отката.
- 08
Следите за журналами ошибок, откликом сервера и отчётами Яндекс Вебмастера и Google Search Console в течение первых дней.
Тестовая копия — не формальность
Тестовая копия экономит больше всего нервов. Она должна быть максимально похожа на рабочий сайт: те же версии расширений, те же настройки веб-сервера, тот же объём данных. Если проверять на пустой базе, часть ошибок не проявится.
Не забудьте про фоновые процессы. Задания cron, обработчики очередей, выгрузки в маркетплейсы и интеграции с CRM часто работают с отдельным окружением и могут упасть уже после переключения, когда никто не смотрит на сайт. Запустите их на тестовой копии вручную и проверьте результат.
Готов ли сайт к PHP 8
- 01Есть свежий бэкап файлов и базы данных, проверено восстановление
- 02Ядро CMS, плагины и темы обновлены до совместимых версий
- 03Сканирование PHPCompatibility не показывает критичных ошибок
- 04Нужные расширения PHP установлены для целевой версии
- 05Формы, оплата, поиск и админка проверены на тестовой копии
- 06Cron-задачи и интеграции с CRM отработали без ошибок
- 07Известен способ отката и тот, кто будет его выполнять
Особенности популярных CMS
Если сайт работает на WordPress, Joomla, Drupal или 1С-Битрикс, актуальные версии этих систем поддерживают PHP 8.x. Главные риски создают не ядро, а сторонние плагины, темы и модули, которые давно не обновлялись. Перед переходом проверьте у каждого дополнения дату последнего релиза и заявленную совместимость.
Самые старые сборки, например OpenCart 3 или самописные движки без обновлений, часто плохо работают на PHP 8. В таком случае есть два пути: обновить систему до поддерживаемой версии или оставить старую версию PHP в изолированной среде и параллельно готовить миграцию. Второй вариант допустим лишь временно, потому что он оставляет сайт без обновлений безопасности.
Хостинг и серверное окружение
На большинстве виртуальных хостингов версию PHP меняют в панели управления (ISPmanager, cPanel, Plesk и аналогичных) в несколько кликов, причём её можно задать отдельно для каждого сайта. Это удобно: вы тестируете новую версию на поддомене и не трогаете основной сайт.
На VPS или выделенном сервере обычно устанавливают несколько версий PHP параллельно и переключают обработчик в конфигурации Nginx или Apache (php-fpm). Не забудьте перенести настройки php.ini: лимит памяти, время выполнения, параметры OPcache. Для новой версии они не копируются автоматически.
Проверьте и параметры OPcache. Он заметно ускоряет работу PHP, а JIT имеет смысл включать лишь после измерений: для типичных сайтов на CMS его эффект небольшой.
Частые ошибки при переходе на PHP 8
Как делают неправильно
- Меняют версию PHP сразу на рабочем сайте в разгар рабочего дня
- Не делают бэкап или не проверяют, что он восстанавливается
- Оставляют на проде вывод ошибок для посетителей, раскрывая пути к файлам
- Игнорируют предупреждения deprecated, откладывая проблему на потом
Как правильно
- 01
Тестировать на копии, переключать в часы минимальной нагрузки
- 02
Проверять восстановление из бэкапа заранее
- 03
Писать ошибки в журнал, а на странице показывать только нейтральное сообщение
- 04
Исправлять deprecated сразу, пока список короткий
Что проверить после переключения
Переключение — не финал. Первые сутки внимательно читайте журнал ошибок PHP и веб-сервера. Проверьте основные сценарии вручную: оформление заказа, отправку форм, вход в личный кабинет, работу поиска и фильтров, письма с сайта.
Дальше следите за поисковыми системами. В Яндекс Вебмастере и Google Search Console смотрите на ошибки сервера, доступность страниц и статус индексирования. Скорость отклика сравнивайте по данным Яндекс Метрики и Google Analytics: если время загрузки выросло, ищите причину в настройках OPcache или в тяжёлом плагине.
Как выглядит безопасная смена версии
Сохраняем файлы и базу, фиксируем текущие настройки php.ini.
Меняем версию в панели хостинга в часы минимального трафика.
Проходим заказ, формы, вход, поиск и админку, смотрим журнал ошибок.
Следим за ошибками 5xx, откликом и отчётами Вебмастера и Search Console.
Когда лучше обратиться к специалисту
Если у сайта нет тестовой копии, много самописного кода или он давно не обновлялся, самостоятельный переход может обернуться простоем. Это особенно важно для интернет-магазинов и сервисов с онлайн-оплатой, где каждый час недоступности стоит денег.
В таких случаях разумно заказать предварительный аудит: специалист просканирует код, составит список правок и оценит трудозатраты. Это дешевле, чем разбираться с последствиями неудачного переключения.
Итоги: как перевести сайт на PHP 8 безопасно
- 01
Сделайте бэкап и проверьте, что его можно восстановить
- 02
Разверните тестовую копию и закройте её от индексации
- 03
Обновите CMS, плагины и библиотеки до совместимых версий
- 04
Просканируйте код с помощью PHPCompatibility, PHPStan и Rector
- 05
Переключайте версию в часы низкой нагрузки и держите откат наготове
- 06
После перехода следите за журналами, Яндекс Вебмастером и Google Search Console
Хорошо спланированный переход занимает от нескольких часов до нескольких дней, в зависимости от размера и возраста проекта. Результат — безопасный, быстрый и готовый к дальнейшим обновлениям сайт.
Часто задаваемые вопросы
Технически можно, но рискованно: накопится слишком много несовместимостей. Надёжнее идти по шагам: сначала до 7.4, затем до 8.0 или 8.1 и дальше до актуальной версии. На каждом этапе прогоняйте проверку кода и тесты.
Выбирайте самую свежую версию, с которой работают ваша CMS, плагины и библиотеки. Версия 8.0 уже не получает обновлений безопасности, поэтому ориентируйтесь на 8.2 или 8.3. Актуальные сроки поддержки смотрите на официальном сайте php.net.
Напрямую версия PHP не является фактором ранжирования. Косвенно влияет скорость ответа сервера, а ошибки 5xx после неудачного переключения могут привести к выпадению страниц из выдачи. После перехода следите за разделами индексирования и ошибок в Яндекс Вебмастере и Google Search Console.
Верните предыдущую версию PHP в панели хостинга, она переключается за минуту. Затем посмотрите журнал ошибок PHP и веб-сервера, найдите причину на тестовой копии и повторите переключение после исправления.
Обычно нет. Для актуальных версий CMS достаточно обновить ядро, плагины и темы. Править код вручную придётся, если на сайте есть самописные модули или устаревшие библиотеки.
Перенесём ваш сайт на PHP 8 без потери трафика и заявок
Проверим код на совместимость, подготовим тестовую копию и безопасно переключим версию PHP
Спасибо за заявку!
Мы свяжемся с вами в ближайшее время.
Десятки сайтов уже работают на PHP 8



