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

Обновление PHP на сервере: пошаговая инструкция

Обновить PHP на сервере безопасно: сделайте бэкап, проверьте совместимость на копии, поставьте новую версию рядом и переключите PHP-FPM.

Обновление PHP на сервере: как сделать это безопасно

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

Устаревший PHP — это не только медленный сайт, но и открытая дверь для взлома: версии 7.4 и 8.0 уже не получают исправлений безопасности.

Ниже — понятный порядок действий для VPS и выделенного сервера, особенности хостинга с панелью, список типичных ошибок и чек-лист проверки после переключения. Инструкция подойдёт и для сайтов на WordPress, 1С-Битрикс, Laravel, и для самописных проектов.

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

PHP — это интерпретатор, который выполняет код вашего сайта на каждом запросе. Разработчики языка поддерживают каждую ветку ограниченное время: сначала два года идёт активная поддержка (исправляются ошибки и уязвимости), затем ещё два года — только исправления безопасности. После этого версия считается устаревшей, и найденные в ней дыры закрывать уже никто не будет.

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

Вторая причина — скорость. Уже переход с PHP 5.6 на PHP 7.0 дал примерно двукратный прирост производительности, а последующие ветки 8.x добавили JIT-компиляцию, улучшенный OPcache и более эффективную работу с памятью. На практике это означает меньшую нагрузку на процессор и более быстрый ответ сервера, что важно и для пользователей, и для поисковых систем.

жизненный цикл версий php
php 7.4Поддержка завершена в ноябре 2022 годаснята с поддержки
php 8.0Поддержка завершена в ноябре 2023 годаснята с поддержки
php 8.1Исправления безопасности до конца 2025 годана исходе
php 8.2Исправления безопасности до конца 2026 годаподдерживается
php 8.3Исправления безопасности до конца 2027 годаподдерживается
php 8.4Исправления безопасности до конца 2028 годаподдерживается

Сроки указаны по официальному графику разработчиков PHP. Актуальную таблицу проверяйте на сайте php.net перед планированием работ.

Как видно из графика, версии 7.4 и 8.0 уже вышли из поддержки, а 8.1 приближается к этому рубежу. Если ваш сервер всё ещё работает на одной из них, обновление стоит запланировать в ближайшее время, а не откладывать до первой аварии.

Для большинства проектов разумный выбор сегодня — PHP 8.3 или 8.4. Они получат исправления безопасности ещё несколько лет, при этом уже прошли «обкатку» в популярных CMS и фреймворках. Самую свежую ветку имеет смысл ставить, когда вы убедились, что все плагины, модули и библиотеки заявляют с ней совместимость.

Что даст обновление PHP

  1. 01

    Закрытие известных уязвимостей и снижение риска взлома сайта

  2. 02

    Рост скорости выполнения кода и снижение нагрузки на процессор сервера

  3. 03

    Меньшее время ответа сервера (TTFB), что помогает метрикам скорости и в Яндексе, и в Google

  4. 04

    Совместимость с актуальными версиями CMS, плагинов, модулей и библиотек Composer

  5. 05

    Доступ к современным возможностям языка: типизации, атрибутам, enum, readonly-свойствам

  6. 06

    Более понятные сообщения об ошибках и удобная отладка

Подготовка: что нужно выяснить до начала работ

Главное правило обновления — не трогать боевой сервер вслепую. Сначала нужно понять, что именно у вас установлено. Выполните в консоли `php -v`, чтобы узнать версию PHP для командной строки, и посмотрите, какая версия обслуживает сам сайт: для этого можно временно создать файл с вызовом `phpinfo()` или заглянуть в конфигурацию Nginx или Apache. Версии для CLI и для веб-запросов часто различаются, и это источник многих путаниц.

Затем составьте список расширений, которые использует проект: mysqli или pdo_mysql, curl, mbstring, gd, xml, zip, intl, opcache, imagick и другие. Их нужно будет поставить для новой версии отдельно, иначе сайт упадёт сразу после переключения. Быстро получить список поможет команда `php -m`.

Наконец, изучите требования самого проекта. В файле composer.json есть строка require с ограничением php, у WordPress, Битрикса и других систем публикуются минимальные и рекомендуемые версии. Проверьте и каждый установленный плагин: именно устаревшие дополнения чаще всего ломаются при переходе на новую ветку.

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

  1. 01

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

  2. 02

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

  3. 03

    Проверьте код на совместимость: запустите статический анализ (например, PHP_CodeSniffer с набором правил PHPCompatibility), обновите зависимости через Composer, обновите CMS и плагины до версий, поддерживающих новый PHP.

  4. 04

    Установите новую версию PHP-FPM параллельно со старой, не удаляя её. Поставьте все нужные расширения и перенесите значимые параметры из старого php.ini: memory_limit, upload_max_filesize, max_execution_time, настройки OPcache.

  5. 05

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

  6. 06

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

  7. 07

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

Как выглядят команды на практике

Ниже пример для Ubuntu или Debian. Стандартные репозитории этих систем содержат ограниченный набор версий, поэтому для установки нескольких веток параллельно обычно подключают сторонний репозиторий, который поддерживает Ондржей Сури (Ondřej Surý). Для CentOS, AlmaLinux и Rocky Linux аналогичную роль играет репозиторий Remi. Подключать сторонние источники пакетов стоит только осознанно и в соответствии с политикой безопасности вашей компании.

Обратите внимание, что пакеты расширений называются по номеру версии, например php8.3-mysql. Если забыть хотя бы одно нужное расширение, сайт может выдать белый экран или ошибку 500, поэтому сверяйтесь со списком из предыдущего этапа.

01 · установка php 8.3 рядом
php -vsudo apt updatesudo apt install php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd php8.3-intlsudo systemctl status php8.3-fpm
02 · было / стало в nginx
былоfastcgi_pass unix:/run/php/php8.1-fpm.sock;
сталоfastcgi_pass unix:/run/php/php8.3-fpm.sock;
03 · применить и проверить
sudo nginx -tsudo systemctl reload nginxsudo update-alternatives --set php /usr/bin/php8.3

Обновление PHP на хостинге с панелью управления

На виртуальном хостинге и в серверных панелях (ISPmanager, FASTPANEL, Plesk, cPanel) всё проще: версию PHP выбирают в настройках домена или сайта, а панель сама подключает нужный пул и набор расширений. Типовой путь: «Домены» → ваш сайт → «Версия PHP» → выбор режима (PHP-FPM или FastCGI) → сохранение.

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

Типичные ошибки при обновлении PHP

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

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

  • Обновляют PHP сразу на боевом сервере без бэкапа и тестовой копии
  • Удаляют старую версию до того, как убедились в стабильности новой
  • Забывают установить расширения (mbstring, curl, gd, intl) для новой ветки
  • Не переносят настройки php.ini и пула PHP-FPM, из-за чего падают загрузка файлов и длинные скрипты
  • Обновляют только веб-версию PHP, а CLI и cron-задачи продолжают работать на старой

Как правильно

  1. 01

    Тренируйтесь на копии, а боевой сайт переключайте в часы минимальной нагрузки

  2. 02

    Держите старую версию установленной минимум неделю для быстрого отката

  3. 03

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

  4. 04

    Сравните ключевые параметры конфигурации старой и новой версий

  5. 05

    Проверьте версию CLI, а также команды в crontab и службах очередей (supervisor, systemd)

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

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

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

Что устарелоКогда изменилосьЧем заменить
Функции mysql_*Удалены в PHP 7.0Расширения mysqli или PDO
create_function()Удалена в PHP 8.0Анонимные функции (замыкания)
each()Удалена в PHP 8.0Цикл foreach
Динамические свойства классовDeprecated с PHP 8.2Явно объявленные свойства класса
Неявные nullable-параметры (Type $x = null)Deprecated с PHP 8.4Явная запись ?Type $x = null

Что проверить для SEO после переключения

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

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

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

чек-лист после переключения
01

Главная и ключевые страницы отдают код 200

02

Работают админка, вход и регистрация

03

Формы заявок отправляют письма и данные в CRM

04

Корзина, оформление заказа и оплата проходят полностью

05

Cron-задачи и скрипты запускаются на новой версии PHP

06

В логах PHP-FPM и веб-сервера нет новых ошибок

План отката на случай проблем

Даже при тщательной подготовке нужно заранее знать, как вернуться назад. Если вы оставили старую версию PHP-FPM установленной, откат сводится к возврату прежнего пути сокета в конфигурации веб-сервера и выполнению команд проверки конфигурации и reload. Это занимает пару минут.

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

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

Итоги: как обновить PHP спокойно и без потерь

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

    Выясните текущую версию PHP, список расширений и требования проекта

  2. 02

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

  3. 03

    Проверьте совместимость на тестовой копии и обновите CMS, плагины и зависимости

  4. 04

    Установите новую версию параллельно, переключите PHP-FPM и проверьте логи

  5. 05

    Проверьте сайт в Яндекс Вебмастере и Google Search Console, а также работу счётчиков

  6. 06

    Держите старую версию для отката хотя бы неделю

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

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

Доверьте обновление PHP специалистам и не рискуйте работой сайта

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

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

Сотни сайтов уже работают на актуальном PHP

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

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

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

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

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

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

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

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

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

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

Контакты

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