Сайт не работает после обновления PHP: что делать
Вскрытый ящик с рядами одинаковых белых деталей: одна изумрудная деталь вынута и лежит рядом, крышка снята

Сайт не работает после обновления PHP: что делать

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

Сайт не работает после обновления PHP: быстрая диагностика

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

Откат версии PHP занимает 2–5 минут и не затрагивает ни файлы сайта, ни базу данных.

Вы нажали «обновить PHP» ради безопасности и скорости, а в ответ получили белый экран, ошибку 500 или сообщение Fatal error. Ситуация неприятная, но поправимая: в большинстве случаев причина одна из трёх — устаревший код, не хватает расширений PHP или изменились настройки. Ниже разберём, как вернуть сайт в строй за несколько минут и как перейти на новую версию без повторного сбоя.

Почему сайт ломается после смены версии PHP

Между крупными версиями PHP разработчики языка удаляют устаревшие функции и ужесточают проверки. Код, который годами работал на PHP 7.x, на PHP 8.x может просто не запуститься. Например, функции mysql_* были удалены ещё в PHP 7.0, а create_function() и each() — в PHP 8.0. Если в старом плагине, самописном модуле или шаблоне остался такой вызов, интерпретатор остановится с фатальной ошибкой, и посетитель увидит пустую страницу.

Вторая частая причина — строгость типов. В PHP 8 арифметические операции над несовместимыми типами, например над массивом и числом, вызывают исключение TypeError, а раньше давали лишь предупреждение. В ветках 8.1 и 8.2 добавились новые предупреждения об устаревании, например о передаче null во встроенные функции и о динамических свойствах классов. Сами по себе они не всегда ломают сайт, но засоряют журнал и могут «ронять» страницы, если вывод ошибок настроен строго.

Третья причина не связана с кодом. На хостинге каждая версия PHP имеет собственный набор расширений и свой файл настроек. После переключения может оказаться, что не включены mbstring, mysqli, curl, gd или imagick, не подключён ionCube Loader или изменился memory_limit. Для сайта это выглядит как поломка, хотя «сломался» лишь набор модулей.

симптом → вероятная причина
01

Белый экран

Фатальная ошибка при выключенном display_errors. Текст ошибки скрыт, но записан в журнал.

02

Ошибка 500

Сбой в коде либо директива php_value в .htaccess, которую новая версия не принимает.

03

Call to undefined function

Функция удалена из языка или не подключено расширение, например mbstring или mysqli.

04

Uncaught TypeError

PHP 8 строже проверяет типы данных, и старый код с «вольными» операциями падает.

05

Админка открывается, сайт нет

Конфликтует тема или один из плагинов, а ядро CMS при этом работает.

06

Ошибка подключения к базе

В новой версии нет нужного драйвера или устаревший код обращается к удалённому расширению mysql.

Первая помощь: возвращаем сайт в рабочее состояние

Не пытайтесь сразу править код. Сначала нужно вернуть работоспособность сайта, чтобы не терять заказы и обращения клиентов. Откройте панель управления хостингом, найдите раздел «PHP», «Версия PHP» или «Выбор версии PHP» и выберите ту версию, на которой сайт работал раньше. В ISPmanager, cPanel и панелях российских хостеров этот пункт находится в настройках сайта или домена.

Если сайт работает через PHP-FPM или режим CGI, изменения применяются в течение нескольких минут. После переключения очистите кеш: плагин кеширования, кеш CMS и кеш CDN, если он подключён. Затем откройте главную страницу, пару внутренних страниц, корзину или форму заявки. Когда всё работает, у вас появляется время спокойно искать причину.

Пошаговый план восстановления сайта

  1. 01

    Запишите, что именно изменилось: с какой версии на какую вы перешли и когда это произошло. Эти данные пригодятся и вам, и техподдержке хостинга.

  2. 02

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

  3. 03

    Очистите кеш сайта, браузера и CDN, чтобы не принять закешированную ошибку за актуальную.

  4. 04

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

  5. 05

    Включите журнал ошибок PHP (error_log) и найдите в нём записи с уровнем Fatal error, зафиксированные в момент поломки.

  6. 06

    Разверните тестовую копию сайта на поддомене или локально и переключите на ней PHP на новую версию.

  7. 07

    Устраните причину: обновите плагин, тему или модуль, замените устаревшие функции либо включите нужное расширение PHP.

  8. 08

    Повторите переход на боевом сайте в период минимальной посещаемости и проверьте формы, оплату и счётчики.

Если сайт ломается из-за директив php_value или php_flag в файле .htaccess, а хостинг работает через PHP-FPM, такие строки нужно перенести в пользовательский файл настроек PHP (.user.ini) либо в раздел настроек PHP в панели.

Как прочитать журнал ошибок и не гадать

Журнал ошибок — главный инструмент диагностики. Обычно файл error_log лежит в корне сайта или в каталоге логов, который доступен в панели хостинга. Откройте последние записи и найдите строку с Fatal error или Uncaught. В ней всегда указаны три вещи: тип ошибки, путь к файлу и номер строки. Если путь ведёт в каталог wp-content/plugins/название-плагина, виновник найден.

Если файла нет, а экран остаётся белым, включите вывод ошибок на тестовой копии: в настройках PHP установите display_errors = On и error_reporting = E_ALL. Никогда не оставляйте это включённым на рабочем сайте, так как сообщения раскрывают пути к файлам и структуру проекта. Если доступа к журналу нет, попросите техподдержку хостинга прислать последние записи — как правило, они делают это быстро.

Сообщение в журналеЧто это значитЧто делать
Call to undefined function create_function()Функция удалена в PHP 8.0Заменить на анонимную функцию или обновить плагин
Call to undefined function mysql_connect()Расширение mysql удалено ещё в PHP 7.0Перейти на mysqli или PDO, обновить модуль
Uncaught TypeError: Unsupported operand typesPHP 8 строже проверяет типы в операцияхПривести данные к нужному типу или обновить компонент
Call to undefined function mb_substr()Для новой версии не включено расширение mbstringВключить расширение в настройках PHP на хостинге
Class "..." not foundНе подключена зависимость или расширение, сломалась автозагрузкаПереустановить зависимости, проверить набор расширений
Allowed memory size exhaustedЛимит памяти в новой версии ниже, чем былУвеличить memory_limit в настройках PHP
было → стало: типичные правки кода
до обновленияпосле обновления
create_function('$a', 'return $a*2;')
→
function($a) { return $a*2; }
while (list($k, $v) = each($arr))
→
foreach ($arr as $k => $v)
mysql_query($sql)
→
mysqli_query($link, $sql) или PDO
$str{0}
→
$str[0]

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

Особенности WordPress, Битрикс и других CMS

В WordPress самая частая причина — плагин или тема, которые давно не обновлялись. Если админка недоступна, подключитесь по FTP или через файловый менеджер хостинга и переименуйте папку wp-content/plugins, например в plugins_off. Все плагины отключатся, и сайт, скорее всего, заработает. Затем возвращайте имя папки и включайте плагины по одному, пока не найдёте виновника. Тот же приём работает с темой: переименуйте её папку, и WordPress переключится на стандартную.

В 1С-Битрикс, OpenCart, Joomla и MODX перед сменой PHP нужно сверить системные требования конкретной версии CMS. Старые редакции просто не рассчитаны на PHP 8.x. В таком случае правильный путь — сначала обновить саму систему и её модули, а уже потом менять версию интерпретатора. Для самописных проектов и сайтов на устаревших фреймворках потребуется аудит кода, поэтому здесь лучше привлечь разработчика.

Ошибки, которые превращают обновление PHP в аварию

Большинство серьёзных простоев случается не из-за самой версии PHP, а из-за способа перехода на неё.

Как делают чаще всего

  • Переключают версию PHP на боевом сайте без резервной копии
  • Меняют версию в разгар рабочего дня или во время рекламной кампании
  • Не читают журнал ошибок и отключают плагины наугад
  • Правят файлы стороннего плагина вручную

Как поступить правильно

  1. 01

    Сделать копию файлов и базы и проверить, что её можно развернуть

  2. 02

    Тестировать новую версию PHP на копии сайта и менять её на рабочем ночью или в выходной

  3. 03

    Сначала смотреть error_log, затем действовать по конкретной записи

  4. 04

    Обновлять или заменять плагин, а при необходимости обращаться к разработчику

Как переходить на новую версию без стресса

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

Обновляйтесь поэтапно: например, с 7.4 на 8.1, затем на 8.2 или 8.3, а не сразу через несколько версий. Так проще понять, какое именно изменение вызвало проблему. И не откладывайте миграцию бесконечно: версии 7.4 и 8.0 больше не получают исправлений безопасности, а значит, чем дольше сайт остаётся на них, тем выше риск взлома.

Что даёт тестовая копия сайта перед обновлением PHP

  1. 01

    Посетители не видят ошибок и не теряют доверие к сайту

  2. 02

    Вы заранее узнаёте, какие плагины и модули несовместимы

  3. 03

    Не нужно срочно чинить сайт под давлением простоя

  4. 04

    Можно спокойно согласовать правки с разработчиком и заказчиком

  5. 05

    Переход на боевой сайт занимает минуты, а не часы

После восстановления: проверьте, как сайт видят поисковики

Когда сайт снова открывается, убедитесь, что поисковые роботы не успели записать его как недоступный. В Яндекс Вебмастере посмотрите разделы диагностики и статистики обхода, а в Google Search Console — отчёты об индексировании и статистику сканирования. Ищите всплеск ответов 5xx и ошибок доступности именно в дни поломки. Если страницы возвращают нормальный код 200, дополнительных действий обычно не требуется: роботы вернутся сами.

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

чек-лист после восстановления
01

Коды ответов страниц

Главная, каталог, статьи и страницы с формами отдают 200, а не 500 или 503.

02

Яндекс Вебмастер и Google Search Console

Нет всплеска ошибок 5xx в статистике обхода и сканирования, а страницы остаются в индексе.

03

Яндекс Метрика и Google Analytics

Счётчики загружаются, визиты и цели фиксируются так же, как до обновления.

04

Формы, заказы, оплата

Тестовая заявка доходит на почту, а заказ создаётся и попадает в CRM.

05

Журнал ошибок

В error_log нет новых Fatal error, а предупреждения Deprecated внесены в план доработок.

Итог: сначала откат, потом причина, затем безопасный переход

Сайт после обновления PHP почти всегда можно вернуть за несколько минут, а причина сбоя находится в журнале ошибок.
  1. 01

    Верните прежнюю версию PHP в панели хостинга и очистите кеш

  2. 02

    Сделайте резервную копию файлов и базы данных

  3. 03

    Найдите виновника по записи Fatal error в error_log

  4. 04

    Обновите или замените несовместимый плагин, тему или код

  5. 05

    Проверьте сайт в Яндекс Вебмастере, Google Search Console, Яндекс Метрике и Google Analytics

Обновление PHP — необходимая гигиена: оно закрывает уязвимости и ускоряет сайт. Чтобы оно не превращалось в аварию, проводите его на тестовой копии, в спокойное время и с готовым бэкапом. Если сайт не открывается прямо сейчас или в коде встречаются устаревшие вызовы, которые вы не готовы править самостоятельно, лучше сразу обратиться к специалисту — это дешевле, чем потерянные заказы.

Часто задаваемые вопросы

Сайт не открывается после обновления PHP? Поможем вернуть его

Найдём причину по журналу ошибок и безопасно переведём сайт на актуальную версию PHP

Бесплатная диагностикаБэкап перед правкамиОтчёт о причинах

Сначала бэкап, потом любые правки

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

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

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.