
Сайт не работает после обновления PHP: что делать
Верните прежнюю версию PHP в панели хостинга, включите журнал ошибок и найдите несовместимый плагин, тему или код. Так сайт снова заработает.
Сайт не работает после обновления PHP: быстрая диагностика
Самый быстрый способ вернуть сайт к жизни — переключить PHP на прежнюю версию в панели хостинга, а затем по журналу ошибок найти несовместимый плагин, тему или фрагмент кода и обновить его.
Вы нажали «обновить 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. Для сайта это выглядит как поломка, хотя «сломался» лишь набор модулей.
Белый экран
Фатальная ошибка при выключенном display_errors. Текст ошибки скрыт, но записан в журнал.
Ошибка 500
Сбой в коде либо директива php_value в .htaccess, которую новая версия не принимает.
Call to undefined function
Функция удалена из языка или не подключено расширение, например mbstring или mysqli.
Uncaught TypeError
PHP 8 строже проверяет типы данных, и старый код с «вольными» операциями падает.
Админка открывается, сайт нет
Конфликтует тема или один из плагинов, а ядро CMS при этом работает.
Ошибка подключения к базе
В новой версии нет нужного драйвера или устаревший код обращается к удалённому расширению mysql.
Первая помощь: возвращаем сайт в рабочее состояние
Не пытайтесь сразу править код. Сначала нужно вернуть работоспособность сайта, чтобы не терять заказы и обращения клиентов. Откройте панель управления хостингом, найдите раздел «PHP», «Версия PHP» или «Выбор версии PHP» и выберите ту версию, на которой сайт работал раньше. В ISPmanager, cPanel и панелях российских хостеров этот пункт находится в настройках сайта или домена.
Если сайт работает через PHP-FPM или режим CGI, изменения применяются в течение нескольких минут. После переключения очистите кеш: плагин кеширования, кеш CMS и кеш CDN, если он подключён. Затем откройте главную страницу, пару внутренних страниц, корзину или форму заявки. Когда всё работает, у вас появляется время спокойно искать причину.
Пошаговый план восстановления сайта
- 01
Запишите, что именно изменилось: с какой версии на какую вы перешли и когда это произошло. Эти данные пригодятся и вам, и техподдержке хостинга.
- 02
Верните прежнюю версию PHP в панели хостинга и убедитесь, что главная и внутренние страницы открываются.
- 03
Очистите кеш сайта, браузера и CDN, чтобы не принять закешированную ошибку за актуальную.
- 04
Сделайте полную резервную копию файлов и базы данных, пока сайт стабилен. Все дальнейшие эксперименты проводите только после этого.
- 05
Включите журнал ошибок PHP (error_log) и найдите в нём записи с уровнем Fatal error, зафиксированные в момент поломки.
- 06
Разверните тестовую копию сайта на поддомене или локально и переключите на ней PHP на новую версию.
- 07
Устраните причину: обновите плагин, тему или модуль, замените устаревшие функции либо включите нужное расширение PHP.
- 08
Повторите переход на боевом сайте в период минимальной посещаемости и проверьте формы, оплату и счётчики.
Как прочитать журнал ошибок и не гадать
Журнал ошибок — главный инструмент диагностики. Обычно файл 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 types | PHP 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 на боевом сайте без резервной копии
- Меняют версию в разгар рабочего дня или во время рекламной кампании
- Не читают журнал ошибок и отключают плагины наугад
- Правят файлы стороннего плагина вручную
Как поступить правильно
- 01
Сделать копию файлов и базы и проверить, что её можно развернуть
- 02
Тестировать новую версию PHP на копии сайта и менять её на рабочем ночью или в выходной
- 03
Сначала смотреть error_log, затем действовать по конкретной записи
- 04
Обновлять или заменять плагин, а при необходимости обращаться к разработчику
Как переходить на новую версию без стресса
Идеальная схема проста: тестовая копия, проверка, переход. Создайте поддомен с копией сайта, включите на нём новую версию PHP и пройдите по основным сценариям: главная, каталог, карточка товара, поиск, форма заявки, оформление заказа, личный кабинет. Параллельно держите открытым журнал ошибок. Любое предупреждение уровня Deprecated — повод запланировать исправление, а любой Fatal error — блокер, который нужно закрыть до переключения.
Обновляйтесь поэтапно: например, с 7.4 на 8.1, затем на 8.2 или 8.3, а не сразу через несколько версий. Так проще понять, какое именно изменение вызвало проблему. И не откладывайте миграцию бесконечно: версии 7.4 и 8.0 больше не получают исправлений безопасности, а значит, чем дольше сайт остаётся на них, тем выше риск взлома.
Что даёт тестовая копия сайта перед обновлением PHP
- 01
Посетители не видят ошибок и не теряют доверие к сайту
- 02
Вы заранее узнаёте, какие плагины и модули несовместимы
- 03
Не нужно срочно чинить сайт под давлением простоя
- 04
Можно спокойно согласовать правки с разработчиком и заказчиком
- 05
Переход на боевой сайт занимает минуты, а не часы
После восстановления: проверьте, как сайт видят поисковики
Когда сайт снова открывается, убедитесь, что поисковые роботы не успели записать его как недоступный. В Яндекс Вебмастере посмотрите разделы диагностики и статистики обхода, а в Google Search Console — отчёты об индексировании и статистику сканирования. Ищите всплеск ответов 5xx и ошибок доступности именно в дни поломки. Если страницы возвращают нормальный код 200, дополнительных действий обычно не требуется: роботы вернутся сами.
Отдельно проверьте аналитику. Яндекс Метрика и Google Analytics продолжают считать визиты, только если код счётчика выводится на страницах. После смены PHP шаблон мог перестать подключать скрипт, и данные тихо перестанут собираться. Сравните число визитов и достижений целей за день до и после обновления, чтобы вовремя заметить провал.
Коды ответов страниц
Главная, каталог, статьи и страницы с формами отдают 200, а не 500 или 503.
Яндекс Вебмастер и Google Search Console
Нет всплеска ошибок 5xx в статистике обхода и сканирования, а страницы остаются в индексе.
Яндекс Метрика и Google Analytics
Счётчики загружаются, визиты и цели фиксируются так же, как до обновления.
Формы, заказы, оплата
Тестовая заявка доходит на почту, а заказ создаётся и попадает в CRM.
Журнал ошибок
В error_log нет новых Fatal error, а предупреждения Deprecated внесены в план доработок.
Итог: сначала откат, потом причина, затем безопасный переход
- 01
Верните прежнюю версию PHP в панели хостинга и очистите кеш
- 02
Сделайте резервную копию файлов и базы данных
- 03
Найдите виновника по записи Fatal error в error_log
- 04
Обновите или замените несовместимый плагин, тему или код
- 05
Проверьте сайт в Яндекс Вебмастере, Google Search Console, Яндекс Метрике и Google Analytics
Обновление PHP — необходимая гигиена: оно закрывает уязвимости и ускоряет сайт. Чтобы оно не превращалось в аварию, проводите его на тестовой копии, в спокойное время и с готовым бэкапом. Если сайт не открывается прямо сейчас или в коде встречаются устаревшие вызовы, которые вы не готовы править самостоятельно, лучше сразу обратиться к специалисту — это дешевле, чем потерянные заказы.
Часто задаваемые вопросы
Да. В панели хостинга (ISPmanager, cPanel и аналогичных) версия PHP переключается за пару минут. Файлы и база данных при этом не меняются, поэтому откат безопасен и обычно сразу возвращает сайт в рабочее состояние.
На рабочих сайтах вывод ошибок обычно отключён (display_errors = Off), и фатальная ошибка не показывается посетителю. Причину ищите в журнале ошибок PHP или временно включите отображение ошибок на тестовой копии.
Выбирайте поддерживаемую ветку PHP 8.x, которую официально поддерживает ваша CMS и все плагины. Версии 7.4 и 8.0 больше не получают обновлений безопасности, поэтому оставаться на них долго рискованно.
Кратковременная недоступность на несколько часов обычно не критична. Если сайт днями отдаёт ошибки 5xx, роботы Яндекса и Google могут снизить частоту обхода, а страницы могут временно выпасть из выдачи. Поэтому чините быстро и проверьте сайт в Яндекс Вебмастере и Google Search Console.
Сайт не открывается после обновления PHP? Поможем вернуть его
Найдём причину по журналу ошибок и безопасно переведём сайт на актуальную версию PHP
Спасибо за заявку!
Мы свяжемся с вами в ближайшее время.
Сначала бэкап, потом любые правки



