Перейти к содержимому
К
  • Главная
  • Блог
  • Зачем обновлять PHP на хостинге и что это даёт с...
Хостинг

Зачем обновлять PHP на хостинге и что это даёт сайту

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

Что такое PHP и при чём тут хостинг

PHP — язык, на котором работают WordPress, 1С-Битрикс, OpenCart и большинство других CMS. Когда посетитель открывает страницу, сервер выполняет PHP-код сайта: тот достаёт данные из базы, собирает из них страницу и отдаёт браузеру. Программа, которая выполняет этот код, установлена на хостинге, и у неё есть версия.

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

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

Почему версии PHP устаревают

У каждой ветки PHP ограниченный срок жизни. Новая версия выходит примерно раз в год, и каждая проходит три этапа.

ЭтапЧто выпускают разработчики PHPЧто это значит для сайта
Активная поддержкаИсправления ошибок и уязвимостейМожно спокойно работать
Только исправления безопасностиЗаплатки для критичных уязвимостей, без прочих правокРаботать можно, но пора планировать переход
Поддержка прекращенаНичегоНайденные уязвимости остаются открытыми навсегда

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

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

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

Безопасность

Уязвимости находят и в самом PHP, и в его расширениях. Для поддерживаемых веток выходят исправления, для снятых с поддержки — нет: любая дыра, найденная после окончания поддержки, останется открытой.

Звучит абстрактно, пока не коснётся лично. К нам обратился владелец сайта на WordPress, который взламывали трижды за полгода: чистили, восстанавливали из бэкапа — через месяц снова редиректы на казино. Сайт крутился на PHP 7.2, давно снятом с поддержки. Перенесли проект на актуальную ветку, обновили плагины — взломы прекратились.

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

Скорость

Разработчики PHP от версии к версии оптимизируют ядро: тот же код выполняется быстрее и расходует меньше памяти. Особенно заметным был переход с пятой ветки на седьмую; восьмая продолжила эту линию и получила JIT-компилятор. Конкретный выигрыш зависит от сайта — у одного он виден невооружённым глазом, у другого почти незаметен, — поэтому измеряйте время ответа сервера до и после.

Это самое дешёвое ускорение сайта из всех возможных: без единой правки в коде и без смены тарифа. Одному интернет-магазину на OpenCart мы таким обновлением заметно сократили время генерации страницы — бесплатно, за один вечер. Что ещё влияет на скорость, смотрите в чек-листе как ускорить сайт.

Совместимость с новыми версиями CMS

У каждой CMS и у каждого плагина есть минимальная версия PHP. Разработчики постепенно поднимают эту планку, и в какой-то момент обновить движок или модуль оплаты становится невозможно, пока не обновлён PHP. Сайт застревает: старый PHP не даёт обновить CMS, старая CMS копит уязвимости. Чем дольше тянуть, тем больше шаг, который придётся сделать за один раз, и тем выше шанс поломок.

Как узнать версию PHP на своём сайте

  • В панели хостинга. В ISPmanager, cPanel, Plesk и собственных панелях хостеров есть раздел вроде «Настройки PHP» или «Выбор версии PHP». Обычно версия меняется одним выпадающим списком, отдельно для каждого сайта.
  • В админке CMS. В WordPress версия PHP показана в разделе «Здоровье сайта», в 1С-Битрикс — в проверке системы, в других движках — на странице сведений о системе.
  • У техподдержки хостера или разработчика. На такой вопрос отвечают за пару минут.

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

До какой версии обновлять PHP

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

СитуацияЧто делать
PHP снят с поддержки, CMS и плагины свежиеОбновлять сейчас: проверка на копии и переключение
PHP получает только исправления безопасностиЗапланировать переход на ближайшие месяцы
PHP актуальный, вышла новая версияНе спешить: дождаться, пока совместимость подтвердят авторы CMS и плагинов
CMS давно не обновляласьСначала обновить CMS и плагины на копии, затем PHP — иногда в несколько шагов
Сайт самописный или сильно доработанНужен разработчик: код проверяют и правят под новую версию
На сайте есть закодированные платные модулиУточнить у автора модуля, есть ли сборка под новую версию PHP

Как обновить PHP без поломок: пошагово

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

  1. Сделайте свежую резервную копию файлов и базы данных и убедитесь, что из неё можно восстановиться. Подробности — в статье про бэкапы сайта.
  2. Посмотрите в документации CMS, какие версии PHP поддерживает ваша сборка.
  3. Разверните тестовую копию сайта на поддомене или локально.
  4. Обновите на копии CMS, тему и плагины до последних версий — часто они уже готовы к новому PHP.
  5. Переключите на копии версию PHP и прокликайте ключевые сценарии: корзину, формы, личный кабинет, оплату, поиск, вход в админку.
  6. Загляните в журнал ошибок PHP: предупреждения об устаревших функциях подскажут, какие модули скоро перестанут работать.
  7. Если что-то сломалось — обновите или замените проблемный плагин и повторите проверку.
  8. Переключите боевой сайт в спокойное время, когда посетителей меньше, и сразу пройдите те же сценарии.
  9. Несколько дней следите за журналом ошибок и за тем, приходят ли заявки и заказы.

Обычно вся процедура занимает от пары часов до пары вечеров.

Что обычно ломается после смены версии

  • Заброшенные плагины и темы. Авторы перестали их обновлять, и код использует функции, которых в новом PHP уже нет.
  • Доработки «на коленке». Правки, когда-то внесённые прямо в файлы движка или темы.
  • Закодированные модули. Платные дополнения, защищённые шифрованием, привязаны к конкретным версиям PHP и требуют отдельной сборки.
  • Расширения и настройки. У каждой версии свой набор подключённых расширений и свои лимиты памяти и времени выполнения. Если сайту нужно расширение, которое не включено, он выдаст ошибку.
  • Фоновые задания. Задачи по расписанию могут запускаться другой версией PHP — её переключают отдельно, в настройках планировщика.

Что делать, если сайт сломался после обновления

Не паниковать: версия переключается обратно так же быстро. Верните прежнее значение в панели — сайт заработает, как раньше, а у вас появится время разобраться. Данные при смене версии не меняются, так что восстанавливать базу из копии обычно не требуется.

Причину подскажет журнал ошибок: в нём указаны файл и строка, на которой код споткнулся, а по пути к файлу видно, какой плагин виноват. Белый экран или код 500 после переключения — почти всегда несовместимый модуль. Что означают такие коды, мы разбирали в статье про ошибки 500, 502, 503 и 504.

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

  • Переключают на живом сайте без проверки. И узнают о сломанной форме заказа от клиентов через неделю.
  • Проверяют только главную. Главная открывается, а оплата и личный кабинет — нет.
  • Обновляют PHP, но не CMS. Или наоборот. Обновлять нужно связку целиком.
  • Откладывают годами. Переход через несколько версий сразу всегда тяжелее, чем регулярные небольшие шаги.
  • Оставляют старую версию ради одного плагина. Дешевле заменить плагин, чем держать весь сайт на неподдерживаемом PHP.
  • Не делают бэкап. Откат версии спасает почти всегда, но не тогда, когда вместе с PHP обновили движок и базу.

Чек-лист обновления PHP

  • Текущая версия PHP известна и сверена с таблицей поддерживаемых версий на php.net.
  • Выбрана целевая версия, которую поддерживают CMS и все плагины.
  • Сделан свежий бэкап файлов и базы, восстановление проверено.
  • CMS, тема и плагины обновлены на тестовой копии.
  • На копии с новой версией PHP пройдены корзина, формы, оплата и вход в админку.
  • Журнал ошибок на копии чистый.
  • Боевой сайт переключён в спокойное время и проверен по тем же сценариям.
  • Проверена версия PHP для заданий по расписанию.

Коротко

Версии PHP поддерживаются ограниченный срок: после его окончания уязвимости никто не закрывает, а новые версии CMS перестают устанавливаться. Актуальные ветки смотрите в таблице на php.net, обновляйтесь до самой новой из тех, что поддерживают ваша CMS и плагины, и всегда начинайте с бэкапа и тестовой копии.

Если своего разработчика нет, мы в CasperLab делаем такие обновления в рамках поддержки: проверяем совместимость на копии, обновляем PHP и CMS, замеряем скорость до и после. А если ваш хостер до сих пор не предлагает свежие версии PHP — поможем подобрать хостинг, где эта проблема не возникает в принципе.

Подобрать хостинг в CasperLab

Поможем подобрать решение под вашу задачу и рассчитаем стоимость без обязательств.

Подобрать хостинг
Поделиться:
Как узнать, какая версия PHP у моего сайта?
Зайдите в панель хостинга и найдите раздел «Настройки PHP» или «Выбор версии PHP» — версия указана там. В WordPress её также показывает раздел «Здоровье сайта». Если пункт не находится, спросите техподдержку хостера, ответят за пару минут.
Сайт работает на старой версии PHP — это срочно?
Если версия уже снята с поддержки, это не пожар, но и не «когда-нибудь потом»: исправления уязвимостей для неё больше не выходят. Планируйте обновление на ближайший месяц и начните с тестовой копии сайта. Статус своей версии смотрите в таблице поддерживаемых версий на php.net.
Может ли сайт сломаться после обновления PHP?
Может, если используются старые плагины или темы. Поэтому новую версию сначала включают на тестовой копии и проверяют формы, корзину и оплату, и только потом переключают боевой сайт. Если что-то пошло не так, прежнюю версию возвращают в панели за минуту.
Нужно ли обновлять PHP до самой последней версии?
Не обязательно. Оптимальный выбор — самая новая версия из поддерживаемых, с которой официально совместимы ваша CMS и плагины. Только что вышедший релиз разумно пропустить на несколько месяцев, пока авторы дополнений не подтвердят совместимость.
Обновление PHP ускорит сайт?
Как правило, да: новые версии выполняют тот же код быстрее и расходуют меньше памяти. Насколько — зависит от сайта, поэтому стоит замерить время ответа сервера до и после. Если страницы тормозят из-за тяжёлых картинок или медленных запросов к базе, одного обновления PHP будет мало.
Сколько стоит обновление PHP на хостинге?
Само переключение версии в панели хостинга бесплатное. Платить приходится за работу специалиста, если нужно развернуть тестовую копию, обновить CMS и заменить несовместимые плагины. Объём зависит от того, как давно сайт не обновлялся.