Как обновить PHP на сайте: безопасная пошаговая инструкция
Две одинаковые белые коробки рядом: левая закрыта, у правой сдвинута крышка и внутри лежит зелёный шарик

Как обновить PHP на сайте: безопасная пошаговая инструкция

Чтобы обновить PHP, сделайте бэкап, проверьте код на совместимость, протестируйте на копии сайта и переключите версию в панели хостинга или на сервере.

Как обновить PHP и не сломать сайт

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

Актуальный выбор для большинства проектов — ветка PHP 8.3 или 8.4: они получают исправления безопасности и заметно быстрее старых версий 7.x.

Версия PHP — одна из тех вещей, о которых вспоминают, когда что-то идёт не так: хостинг присылает уведомление об отключении старой ветки, плагин отказывается работать, а сканер безопасности показывает красный статус. Ниже — понятная инструкция: как определить текущую версию, подготовиться к переходу, выполнить обновление на хостинге или VPS и проверить, что сайт продолжает нормально работать для посетителей, Яндекса и Google.

Зачем вообще обновлять PHP

Главная причина — безопасность. Когда ветка PHP снимается с поддержки, разработчики перестают выпускать для неё исправления уязвимостей. Любая найденная после этого брешь остаётся открытой навсегда, а сайты на устаревших версиях становятся лёгкой целью для автоматических сканеров и ботов. Для интернет-магазина или сайта с формами и личным кабинетом это прямой риск утечки данных клиентов.

Вторая причина — скорость. В PHP 7 и особенно в PHP 8 заметно улучшили производительность: появился JIT-компилятор, оптимизировали работу с памятью и массивами. Реальный прирост зависит от проекта: на одних сайтах это единицы процентов, на других — десятки. В любом случае страницы отдаются быстрее, а это хорошо и для пользователей, и для поведенческих метрик, которые вы смотрите в Яндекс Метрике и Google Analytics.

Третья причина — совместимость. Современные версии WordPress, 1С-Битрикс, Laravel, Symfony и популярных плагинов постепенно повышают минимальные требования. Если вы застряли на PHP 7.4, рано или поздно очередное обновление CMS или модуля просто перестанет устанавливаться. Откладывать переход выгодно только до тех пор, пока он не стал вынужденным и срочным.

Статус версий PHP: что ещё поддерживается
01 / ветка 7.4
PHP 7.4
Поддержка закончилась в ноябре 2022 года
не поддерживается
02 / ветка 8.0
PHP 8.0
Поддержка закончилась в ноябре 2023 года
не поддерживается
03 / ветка 8.1
PHP 8.1
Только исправления безопасности до 31 декабря 2025 года
на исходе
04 / ветка 8.2
PHP 8.2
Исправления безопасности до 31 декабря 2026 года
поддерживается
05 / ветка 8.3
PHP 8.3
Исправления безопасности до 31 декабря 2027 года
рекомендуется
06 / ветка 8.4
PHP 8.4
Исправления безопасности до 31 декабря 2028 года
рекомендуется
Даты уточняйте на официальной странице поддерживаемых версий PHP: график периодически обновляется.

Сначала выясните, что у вас сейчас

Прежде чем что-то менять, определите текущую версию PHP. Есть несколько способов. В панели хостинга (ISPmanager, cPanel, Plesk и аналогичных) версия обычно указана в разделе настроек сайта или домена. Если у вас сервер, выполните в терминале команду `php -v`. Учтите: консольная версия и версия, под которой работает веб-сервер, могут отличаться, поэтому надёжнее проверить именно через веб — например, временным файлом с вызовом `phpinfo()`. После проверки такой файл обязательно удалите.

Затем сделайте инвентаризацию. Выпишите, какая у вас CMS и в какой версии, какие плагины, модули и темы установлены, нет ли собственного кода от подрядчиков, какие расширения PHP используются (mysqli, curl, gd, mbstring, intl, zip и другие). Особое внимание уделите плагинам, которые давно не обновлялись: именно они чаще всего ломаются при переходе на PHP 8.

Если у вас магазин, интеграции с 1С, платёжными системами или службами доставки, отдельно уточните у разработчиков этих модулей, поддерживают ли они выбранную версию PHP. Такая проверка занимает час, а экономит дни восстановления.

Пошаговый план обновления PHP

  1. 01

    Определите текущую и целевую версии. Проверьте, какая ветка PHP работает сейчас, и выберите новую — желательно ту, у которой впереди не меньше двух лет поддержки (например, 8.3 или 8.4).

  2. 02

    Сделайте полную резервную копию. Сохраните файлы сайта и дамп базы данных, а также конфигурации веб-сервера и php.ini. Убедитесь, что копию можно развернуть: бэкап, который ни разу не восстанавливали, — это лишь надежда.

  3. 03

    Создайте тестовую копию сайта. Разверните копию на поддомене или в отдельном каталоге, закройте её от индексации в robots.txt и авторизацией, чтобы Яндекс и Google не проиндексировали дубль.

  4. 04

    Проверьте код на совместимость. Запустите PHP_CodeSniffer с набором правил PHPCompatibility, статический анализатор PHPStan или Rector. Они покажут удалённые функции и устаревшие конструкции до того, как сайт начнёт падать.

  5. 05

    Переключите версию на тестовой копии. Обновите зависимости через Composer, включите вывод ошибок и пройдите по ключевым сценариям: главная, каталог, карточка товара, корзина, оформление заказа, формы, личный кабинет, админка.

  6. 06

    Обновите PHP на рабочем сайте. Лучше всего делать это в период наименьшей посещаемости. Переключите версию в панели хостинга или установите новую ветку на сервере и перенаправьте на неё веб-сервер.

  7. 07

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

Как переключить версию: хостинг или собственный сервер

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

На VPS или выделенном сервере вы устанавливаете новую версию самостоятельно. Для Ubuntu обычно используют репозиторий Ондржея Сури (PPA ondrej/php), для Debian — его собственный репозиторий, для семейства RHEL — репозиторий Remi. Старая и новая версии могут стоять рядом, поэтому откатиться несложно. Пример для Ubuntu с PHP-FPM и Nginx приведён ниже.

terminal / ubuntu + nginx + php-fpm
# 1. подключаем репозиторий с актуальными версиями PHPsudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update# 2. ставим новую версию и нужные расширенияsudo apt install php8.3-fpm php8.3-cli php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-gd# 3. сверяем набор модулей со старой версиейphp7.4 -m > old.txt
php8.3 -m > new.txt
diff old.txt new.txt# 4. в конфиге сайта меняем сокет на php8.3-fpm.sock#    fastcgi_pass unix:/run/php/php8.3-fpm.sock;sudo nginx -t
sudo systemctl restart php8.3-fpm
sudo systemctl reload nginx
Не забудьте перенести свои настройки (memory_limit, upload_max_filesize, max_execution_time, opcache) из php.ini старой версии в php.ini новой.

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

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

СпособКак меняется версияКому подходитСложность
Панель хостингаВыбор версии PHP в настройках доменаЛендингам, блогам, небольшим магазинамНизкая
VPS или выделенный серверУстановка новой ветки из репозитория и смена сокета PHP-FPMПроектам со своим сервером и root-доступомСредняя
Docker-контейнерыСмена тега образа (например, php:8.3-fpm) и пересборкаКомандам с CI/CD и разработчикамиВыше средней
Управляемое обслуживаниеАдминистратор или подрядчик делает всё за васБизнесу без технического специалистаМинимальная для владельца сайта

Что чаще всего ломается в коде

Переход с PHP 7.x на 8.x — самый «болезненный», потому что в восьмой ветке разработчики убрали много устаревшего и ужесточили поведение языка. Функции вроде `create_function()` и `each()` удалены полностью. Передача `null` во встроенные строковые функции в версии 8.1 стала выдавать предупреждение об устаревании. А в PHP 8.2 пошли предупреждения о динамических свойствах: когда в классе обращаются к свойству, которое не было объявлено заранее.

Плохая новость: старые шаблоны и плагины, которые не обновлялись годами, содержат много таких конструкций. Хорошая: большинство исправлений механические и хорошо автоматизируются инструментом Rector. Ниже — пять самых частых замен, с которыми приходится сталкиваться.

Было → стало: типичные правки при переходе на PHP 8
устаревший код
рабочий вариант
01
create_function('$a', 'return $a * 2;')
fn($a) => $a * 2
02
while (list($k, $v) = each($arr))
foreach ($arr as $k => $v)
03
$this->title = 'x'; без объявления свойства
public string $title = ''; в начале класса
04
strlen($value), где $value может быть null
strlen((string) $value) или проверка на null
05
mysql_query($sql)
PDO или mysqli с подготовленными запросами

Как не потерять время на исправлениях

Не пытайтесь править всё вручную по наитию. Запустите анализатор на тестовой копии и получите список файлов с проблемами, отсортированный по серьёзности. Критичные ошибки (удалённые функции, фатальные ошибки типов) исправляйте в первую очередь, предупреждения об устаревании — во вторую. Если какой-то плагин или модуль давно заброшен, ищите замену: латать чужой код без поддержки обычно дороже, чем перейти на актуальный аналог.

Параллельно обновите зависимости через Composer. Часто достаточно выполнить `composer update` и поправить ограничения версий в файле composer.json. Если проект использует фреймворк (Laravel, Symfony, Yii), сначала поднимите его до версии, поддерживающей новый PHP, и только потом меняйте версию на сервере.

Частые ошибки при обновлении PHP

Большинство аварий после смены версии случаются не из-за самого PHP, а из-за спешки и пропущенной подготовки.

Как делать не стоит

  • Менять версию на боевом сайте без бэкапа и тестовой копии
  • Перепрыгивать через несколько веток, не проверив код на совместимость
  • Забыть установить расширения PHP (mbstring, curl, gd, intl), которые были на старой версии
  • Оставить на тестовой копии открытый доступ для поисковых роботов
  • Не перенести настройки memory_limit, upload_max_filesize и opcache из старого php.ini
  • Обновлять PHP в разгар распродажи или рекламной кампании в Яндекс Директ и Google Ads

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

  1. 01

    Всегда делать бэкап файлов и базы и проверять, что его можно восстановить

  2. 02

    Тестировать на копии, закрытой от индексации и защищённой паролем

  3. 03

    Сверять списки расширений командой php -m до и после установки

  4. 04

    Переносить пользовательские настройки php.ini на новую версию

  5. 05

    Выбирать тихое время суток и заранее подготовить план отката

  6. 06

    Приостановить платный трафик на момент работ или заранее проверить критичные страницы

После обновления: проверка и SEO

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

Отдельно проверьте индексацию. Яндекс Вебмастер и Google Search Console присылают уведомления о проблемах с доступностью сайта; загляните в отчёты о статусе страниц и ошибках сервера (коды 5xx) в течение нескольких дней после работ. Сравните скорость загрузки до и после обновления, например, через отчёты Яндекс Метрики и PageSpeed Insights. Если ошибок нет, а время ответа сервера снизилось, значит, переход прошёл успешно.

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

Итоги: обновлять PHP нужно планово, а не в аварийном режиме

Безопасное обновление PHP — это подготовка, тестовая копия и план отката, а не только переключатель в панели.
  1. 01

    Определите текущую версию и сверьтесь с графиком поддержки

  2. 02

    Сделайте бэкап файлов и базы, проверьте возможность восстановления

  3. 03

    Проверьте код и плагины на совместимость до переключения

  4. 04

    Тестируйте на закрытой от индексации копии сайта

  5. 05

    После запуска следите за логами, Яндекс Вебмастером и Google Search Console

Если у вас до сих пор работает PHP 7.x или 8.0, откладывать переход не стоит: это вопрос безопасности и стабильности сайта. Выберите актуальную ветку 8.3 или 8.4, выделите время на подготовку и пройдите все шаги по порядку. Если нет уверенности или технического специалиста, доверьте обновление тем, кто делает это регулярно, — это дешевле, чем восстанавливать сайт после неудачного эксперимента.

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

Обновим PHP на вашем сайте без простоев и потери данных

Проверим совместимость кода, настроим тестовую копию и безопасно переключим версию на сервере.

Бесплатный аудит версииБэкап перед работамиОткат за 5 минут

Более 200 сайтов переведены на PHP 8

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

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

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

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

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

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

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

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

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

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

Контакты

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