Сайт сломался после смены версии PHP на хостинге — как откатиться и найти причину

  • Обновлено
  • Чтение ≈ 5 минут

Краткий ответ

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

В этой статье
  1. Почему ломается сайт
  2. Типичные причины
  3. Порядок действий
  4. Как вернуть работу быстро
  5. Если плагин нельзя обновить

#Почему ломается сайт

В новых версиях PHP удалены устаревшие функции и изменены правила: в PHP 7 удалены mysql_*, в PHP 8 ужесточены типы, удалены create_function, each(), изменена работа с null. Старые темы и плагины WordPress, модули Bitrix, самописные скрипты вызывают фатальные ошибки. Симптомы: белый экран, ошибка 500, сообщения Fatal error: Uncaught Error, Call to undefined function.

#Типичные причины

Возможная причинаКак узнатьЧто делать
Устаревший плагин или темаНе обновлялся годами.Ошибка указывает на wp-content/plugins.Обновите или замените.
Удалённые функцииmysql_*, each.Call to undefined function.Перепишите код.
Строгая типизация PHP 8Передача null.Deprecated/TypeError.Исправьте вызов.
Отсутствует расширениеМодуль PHP не включён.Class not found.Включите расширение в панели.
Старая CMSВерсия не поддерживает PHP.Критические ошибки.Обновите CMS.
Неверные настройки php.iniПараметры сбросились.Лимиты, ошибки загрузки.Задайте заново.

#Порядок действий

  1. Верните прежнюю версию PHP в панели хостинга, чтобы сайт заработалЕсли сайт перестал открываться сразу после переключения PHP, в панели хостинга откройте настройки нужного домена → «PHP», «Версия PHP» или «Обработчик PHP» и верните точную прежнюю версию и режим работы, которые записаны до обновления. Сохраните изменение и проверьте главную, авторизацию и форму отправки. Это временная мера: устаревшую неподдерживаемую версию нельзя оставлять надолго, особенно на публичном сайте.
  2. Сделайте копию сайта на тестовый поддоменПеред исправлениями создайте резервную копию файлов и базы в панели хостинга; скачайте её и проверьте наличие обоих компонентов. Для проверки новой версии отдельно создайте тестовый сайт (поддомен или закрытое окружение) с копией файлов и БД, изменив конфигурацию подключения именно у копии. Запретите индексацию тестового сайта авторизацией. Не меняйте PHP на основном сайте во время поиска несовместимых расширений.
  3. Включите вывод и журнал ошибокВ настройках PHP тестового домена найдите «Журнал ошибок» или путь error_log; при наличии SSH прочитайте свежие строки tail -n 50 /ПУТЬ/К/error.log, заменив путь реально существующим. В рабочем сайте не включайте публичный вывод ошибок. Для WordPress задавайте WP_DEBUG_LOG только на копии и затем отключайте; файл wp-content/debug.log не должен быть доступен посетителям. Воспроизведите конкретное действие и запишите время ошибки.
  4. Найдите файл и строку ошибкиНайдите в журнале Fatal error, Parse error, Uncaught Error или Call to undefined function и полный путь к файлу: часто он указывает на тему или расширение. В редакторе файлов откройте именно этот файл и указанную строку, просмотрите соседние строки. Если есть SSH, сначала проверьте версию PHP веб-сайта отдельно от php -v в консоли — они могут различаться, — и запускайте php -l нужным исполняемым файлом новой версии на копии проекта.
  5. Обновите CMS, темы и плагины до версий, поддерживающих новый PHPНа тестовой копии откройте административную панель CMS → обновления и проверьте минимальную/максимальную версию PHP для текущего выпуска системы, темы и каждого расширения по официальным сведениям разработчика. Создайте полную копию, обновляйте сначала ядро, затем темы и плагины с проверкой сайта после каждого изменения. Если административная панель не открывается, обновление выполняйте средствами хостинга или установщика CMS по официальной процедуре.
  6. Замените или удалите несовместимые плагиныЕсли ошибка вызвана конкретным плагином, сначала отключите его в панели тестового WordPress через «Плагины → Установленные»; если вход недоступен, временно переименуйте только его каталог в wp-content/plugins через файловый менеджер. Затем повторите действие и убедитесь, что ошибка исчезла. Подберите поддерживаемую замену, а не удаляйте весь каталог плагинов без копии и плана возврата.
  7. Проверьте код на совместимость инструментом PHPCompatibilityДля собственного кода на тестовой копии сравните используемые конструкции с примечаниями о несовместимости в руководстве PHP. При наличии Composer устанавливайте анализатор PHPCompatibility в каталог отдельного проекта, следуя официальной инструкции инструмента: устаревшие команды установки могут не работать. Результаты статической проверки — подсказки, их надо сверять с журналом и фактической версией PHP, а не менять код механически.
  8. Переключите версию PHP и протестируйтеПосле исправления ошибок в тестовой копии переключите её на новую PHP и пройдите контрольный набор: главная, вход, загрузка изображения, формы, отправка письма и обновление материалов. Зафиксируйте результат и окно отката. Лишь затем сделайте свежую копию рабочего сайта, переключите рабочую версию и повторите проверки. При появлении ошибки верните прежнюю настройку и исправляйте проблему снова на копии.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Версия PHP, на которой запущен CLI и текущие ошибки
    Linux · Терминал (Bash)Команда
    Версия PHP, на которой запущен CLI и текущие ошибки
    php -v
    tail -n 50 ~/logs/error.log
    Вариант 2Поиск устаревших функций в коде
    Linux · Терминал (Bash)Команда
    Поиск устаревших функций в коде
    grep -rn --include=*.php -E 'mysql_connect|mysql_query|create_function|each\(' ~/www/site | head -30
    Вариант 3Проверка синтаксиса файлов под новой версией PHP
    Linux · Терминал (Bash)Команда
    Проверка синтаксиса файлов под новой версией PHP
    find ~/www/site -name '*.php' -exec php -l {} \; 2>&1 | grep -v 'No syntax errors' | head -20
    Вариант 4Временно включить журнал ошибок WordPress (после отладки отключите)
    PHPКоманда
    Временно включить журнал ошибок WordPress (после отладки отключите)
    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
    Вариант 5Анализатор совместимости PHPCompatibility (установка через Composer)
    Linux · Терминал (Bash)Команда
    Анализатор совместимости PHPCompatibility (установка через Composer)
    php -v
    # Для PHPCompatibility установите анализатор в отдельном тестовом проекте по актуальной инструкции поставщика.
    # Не устанавливайте глобальные пакеты Composer на рабочем сервере ради одной проверки.

#Как вернуть работу быстро

В панели хостинга (ISPmanager: «WWW-домены → PHP», cPanel: «MultiPHP Manager») выберите прежнюю версию PHP для домена. Через минуту сайт заработает на старом PHP. Затем планомерно обновляйте компоненты. Не оставляйте старую версию PHP надолго: она перестаёт получать обновления безопасности. Версии с поддержкой уточняйте на https://www.php.net/supported-versions.php .

#Если плагин нельзя обновить

Иногда нужный плагин давно не поддерживается. В WordPress найдите его замену в каталоге https://wordpress.org/plugins/ и сравните по дате последнего обновления и версии «Tested up to». Если замены нет, можно оставить сайт на старой версии PHP в изолированном окружении, но тогда отключите административный раздел от интернета и обновляйте ядро. Для самописного кода запустите автоматическую правку с помощью Rector (composer require rector/rector --dev, затем vendor/bin/rector process src --dry-run), который преобразует часть устаревших конструкций.

Перед включением новой версии убедитесь, что включены нужные расширения (php -m) и что memory_limit и max_execution_time не сбросились. Эти значения хранятся отдельно для каждой версии PHP на хостинге, и после переключения их часто нужно задать заново.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.