Добавить в корзинуПозвонить
Найти в Дзене

Обновил PHP — сайт лег. Как избежать такой ошибки

Утром вторника получил паническое сообщение от клиента: «Сайт не работает. Белый экран». Открываю — действительно, пусто. Только ошибка в логах: PHP Fatal error: Uncaught TypeError. Сначала подумал на взлом. Проверил файлы — изменений нет. Потом на сбой базы — подключение работает. Кэш почистил, права проверил. Ничего. Потом вспомнил: вчера вечером хостинг прислал уведомление «Обновите PHP до 8.0». Я согласился. Система обновила версию глобально — для всего аккаунта. Включая сайт клиента на старом движке. Когда сайт падает после обновления, инстинкт подсказывает искать в коде. Я потратил час на: Но проблема была не в коде. Проблема в архитектуре хостинга. Старая версия плагина для оплаты использовала устаревший синтаксис, который в PHP 8 превратился из предупреждения в фатальную ошибку. На 7.4 — работало. На 8.0 — упало всё. И самое обидное: откатить версию быстро не получилось. Пришлось ждать ответа поддержки, потому что в панели был только один переключатель на весь аккаунт. Никакого
Оглавление

Утром вторника получил паническое сообщение от клиента: «Сайт не работает. Белый экран». Открываю — действительно, пусто. Только ошибка в логах: PHP Fatal error: Uncaught TypeError.

Сначала подумал на взлом. Проверил файлы — изменений нет. Потом на сбой базы — подключение работает. Кэш почистил, права проверил. Ничего.

Потом вспомнил: вчера вечером хостинг прислал уведомление «Обновите PHP до 8.0». Я согласился. Система обновила версию глобально — для всего аккаунта. Включая сайт клиента на старом движке.

Что я проверял в поисках причины

Когда сайт падает после обновления, инстинкт подсказывает искать в коде. Я потратил час на:

  • Поиск измененных файлов через FTP
  • Проверку логов на предмет атак
  • Откат последних правок в админке
  • Очистку кэша и сессий

Но проблема была не в коде. Проблема в архитектуре хостинга.

Старая версия плагина для оплаты использовала устаревший синтаксис, который в PHP 8 превратился из предупреждения в фатальную ошибку. На 7.4 — работало. На 8.0 — упало всё.

И самое обидное: откатить версию быстро не получилось. Пришлось ждать ответа поддержки, потому что в панели был только один переключатель на весь аккаунт. Никакого «вернуть для этого домена».

Почему глобальное обновление — тупик

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

Это значит:

  • Обновил версию — обновились все проекты разом
  • Один сломанный сайт тянет вниз остальные
  • Откат требует ручного вмешательства или ожидания поддержки

Для разработчика это неудобно. Для владельца бизнеса — катастрофа. Каждый час простоя = потерянные заказы + нервные клиенты.

Как я теперь тестирую обновления

После этого случая перешел на хостинг с изолированным управлением версиями. Сейчас мой алгоритм:

  1. Копирую сайт на поддомен (например, test.site.ru) через файловый менеджер
  2. В панели для этого поддомена выбираю новую версию PHP
  3. Прогоняю ключевые сценарии: корзина, оплата, авторизация
  4. Если всё работает — меняю версию на основном домене

Всё это делается без правки .htaccess, без SSH, без дополнительных серверов. Просто два клика в панели — и поддомен работает на новой версии, а основной сайт даже не заметил изменений.

На Beget именно так и работает. Для каждого домена и поддомена отдельный выбор версии PHP — от 5.6 до 8.3. Меняешь на тестовом — продакшен продолжает работать на старой.

Переезд занял меньше времени, чем отладка на старом хостинге

Боялся миграции — думал, будет сложно. Оказалось проще некуда:

  • Заявку на бесплатную миграцию подал вечером
  • Утром пришло письмо: «Сайт перенесен, проверяйте»
  • Поменял DNS — и через час сайт работал на новом хостинге

За те 11 часов простоя на старом хостинге я мог трижды переехать. А еще — спокойно обновить PHP на тестовом поддомене, убедиться, что всё работает, и только потом переключить основной сайт.

Теперь обновляю версии без стресса. Создал поддомен, проверил — за 20 минут. Основной сайт ни разу не лег с момента переезда.

Если устал бояться кнопки «Обновить» — проблема не в твоих навыках. Проблема в хостинге, который не дает безопасно тестировать изменения. Простой переезд решает это раз и навсегда. Попробуй на Beget.