На одном хостинг-аккаунте часто живут сразу несколько сайтов: основной сайт компании, старая промо-страница, блог и тестовая копия. Их писали в разные годы разные разработчики, и у каждого свои требования к PHP. Если для всего аккаунта действует одна версия, ради старого сайта приходится держать на устаревшей версии и новый. Возможность выбрать версию PHP для каждого сайта отдельно решает именно эту проблему.
Почему сайтам нужны разные версии PHP
PHP выпускает новую мажорную версию каждый год, и с каждой версией часть старых функций удаляется, а синтаксис расширяется. Самописная CMS, написанная несколько лет назад, может спокойно работать на PHP 7.4, но падать на 8.x из-за обращения к удалённым функциям. Новый проект на Laravel или свежие плагины WordPress, наоборот, могут требовать PHP 8.2 и выше. Если заставить оба сайта работать на одной версии, один из них сломается.
Вторая причина — безопасность и скорость. Новые версии PHP, как правило, работают быстрее и получают исправления уязвимостей. При общей версии самый старый сайт тянет назад весь аккаунт. Отдельные версии позволяют перевести новые сайты на современный PHP, а старый временно оставить на прежней версии, пока его не обновят.
Где выбрать версию в ISPmanager
На хостинге sayt.uz панель управления — ISPmanager, в неё вы входите прямо со страницы хостинга в кабинете sayt.uz. В панели есть список сайтов (раздел WWW-домены). Откройте нужный сайт на редактирование: в блоке настроек PHP указаны режим работы и версия. После выбора версии и сохранения изменение касается только этого сайта, остальные продолжают работать на своих версиях.
Названия пунктов меню могут немного отличаться в зависимости от версии панели и тарифа. Если нужной версии нет в списке или поле выбора неактивно, возможно, эта настройка закрыта на вашем тарифе. В таком случае лучше всего написать тикет в техподдержку из кабинета и уточнить, какие версии доступны.
Почему важен режим работы
Вместе с версией выбирается и режим работы PHP: обычно это модуль Apache, CGI и FastCGI (PHP-FPM). Альтернативные версии чаще всего доступны только в режимах CGI или FastCGI, потому что модуль Apache может работать на сервере лишь с одной версией. PHP-FPM использует отдельный пул процессов для каждого сайта и в большинстве случаев является самым стабильным выбором.
Пример: три сайта одной ташкентской компании
Представим магазин стройматериалов в Ташкенте, у которого на одном аккаунте три сайта. Основной сайт example.uz написан в 2019 году на собственном PHP-коде и стабильно работает пока только на PHP 7.4. Новый интернет-магазин shop.example.uz построен на WooCommerce и требует PHP 8.3. Третий сайт blog.example.uz — обычный блог на WordPress, который хорошо работает и на 8.2, и на 8.3.
Правильное решение — назначить каждому сайту свою версию: основному временно 7.4, магазину и блогу 8.3. Одновременно нужно составить план обновления основного сайта, потому что 7.4 официально не поддерживается и не получает исправлений безопасности. Отдельная версия здесь не постоянное решение, а способ выиграть время для спокойного обновления старого сайта.
| Сайт | Платформа | Версия PHP | Комментарий |
|---|---|---|---|
| example.uz | Самописный код | 7.4 | Временно, обновление запланировано |
| shop.example.uz | WooCommerce | 8.3 | По требованиям плагинов |
| blog.example.uz | WordPress | 8.3 | Современная версия |
Проверка версии, cron и терминал
После смены версии полезно убедиться, на какой версии сайт работает на самом деле. Проще всего создать временный файл в папке сайта и открыть его в браузере. После проверки обязательно удалите файл, так как он раскрывает лишнюю информацию о сервере.
<?php
echo PHP_VERSION;
Важная тонкость: версия, выбранная для сайта в панели, относится только к веб-запросам. Если вы запускаете php в терминале по SSH или пишете задание cron, может использоваться стандартная версия сервера. В итоге сайт работает на 8.3, а cron-скрипт выполняется на другой версии и выдаёт неожиданные ошибки. Поэтому в cron и командах терминала указывайте полный путь к нужной версии.
# Стандартная версия
php -v
# Альтернативная версия по полному пути (путь зависит от сервера)
/opt/php83/bin/php -v
# Пример cron: запуск скрипта на PHP 8.3 каждые 15 минут
*/15 * * * * /opt/php83/bin/php /var/www/user/data/www/shop.example.uz/cron.php
На серверах с ISPmanager альтернативные версии обычно лежат по путям вроде /opt/php83/bin/php, но точный путь зависит от конфигурации. Если не уверены, проверьте командой ls /opt или спросите техподдержку. То же правило касается Composer: запускайте его той же версией PHP, на которой работает сайт.
Что проверить перед сменой версии
Версия меняется одной кнопкой, но последствия могут быть серьёзными. Рекомендуемый порядок действий:
- Сделайте резервную копию файлов сайта и базы данных.
- Проверьте в документации, поддерживают ли CMS, тема и плагины новую версию.
- По возможности сначала опробуйте новую версию на тестовой копии сайта.
- Меняйте версию в период низкой посещаемости, например вечером.
- После смены вручную проверьте главные страницы, формы, корзину и админку.
Обратите внимание и на расширения. Для каждой версии PHP набор расширений свой, поэтому включённые в старой версии intl, imagick или ionCube могут быть не включены в новой. Параметры вроде memory_limit и upload_max_filesize тоже могут храниться отдельно для каждой версии — перепроверьте их.
Как откатиться, если что-то сломалось
Большой плюс отдельных версий — быстрый откат. Если после перехода сайт показывает белую страницу или ошибку 500, выберите в панели прежнюю версию и сохраните. Обычно сайт возвращается в рабочее состояние за несколько секунд, после чего можно спокойно разобраться в причине по журналу ошибок.
Журнал ошибок находится в разделе журналов сайта в панели или в папке logs вашего аккаунта. Строки Fatal error точно показывают, какой файл и какая функция вызывают проблему. С этой информацией разработчик обновляет код, и затем сайт снова переводится на новую версию. Если не получается разобраться самостоятельно, отправьте текст ошибки в техподдержку — это заметно ускорит поиск причины.