PHP
Как сменить версию PHP на Ubuntu: CLI, Apache, Nginx и PHP-FPM
Короткий ответ: на Ubuntu версию PHP нужно переключать отдельно для командной строки и отдельно для веб-сервера. Команда update-alternatives меняет php в терминале, но сайт в браузере может продолжить работать на старом PHP, если Apache или Nginx подключены к другому модулю или другому PHP-FPM сокету
Именно в этом чаще всего и ломается логика пользователя. Он вводит php -v, видит новую версию, открывает сайт и получает старую. Это не баг Ubuntu, а нормальное разделение окружений: CLI, Apache и Nginx могут использовать разные PHP-процессы
Сначала посмотрите, какие версии установлены
Проверьте PHP в терминале
php -v
Посмотрите, какие бинарники PHP есть в системе
ls /usr/bin/php*
Для FPM проверьте сервисы
systemctl list-units --type=service | grep php
Если нужной версии нет в списке, ее сначала нужно установить. Не добавляйте случайные репозитории только ради “самой новой версии”: на рабочем сервере важнее поддерживаемая версия, совместимость проекта и понятный источник пакетов
Как переключить PHP в терминале
Для командной строки используется update-alternatives
sudo update-alternatives --config php
Если у вас установлены отдельные версии phpize и php-config, их тоже можно переключить
sudo update-alternatives --config phpize
sudo update-alternatives --config php-config
После выбора проверьте
php -v
which php
Это влияет на Composer, artisan-команды Laravel, консольные скрипты и запуск php script.php
Как переключить PHP для Apache
Если Apache использует модуль PHP, нужно отключить старый модуль и включить новый. Номера версий ниже примерные, замените их на те, которые реально установлены в вашей системе
sudo a2dismod php8.2
sudo a2enmod php8.3
sudo systemctl restart apache2
Проверьте сайт через файл phpinfo.php
<?php
phpinfo();
Если браузер показывает новую версию, Apache переключился. Если нет, возможно, сайт работает не через Apache-модуль, а через PHP-FPM
Как переключить PHP для Nginx
Nginx передает PHP-файлы в PHP-FPM. Нужно изменить сокет в конфигурации сайта
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
Проверьте, что нужный FPM-сервис запущен
sudo systemctl status php8.3-fpm
Проверьте конфигурацию Nginx и перезапустите сервисы
sudo nginx -t
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx
Если в конфигурации остался сокет старой версии, браузер будет использовать старый PHP даже после успешного update-alternatives
Как проверить итоговую версию
Сделайте две проверки. Первая — терминал
php -v
Вторая — браузер через файл в корне сайта
<?php
echo PHP_VERSION;
Если версии совпали, переключение прошло чисто. Если не совпали, значит CLI и веб-сервер используют разные PHP. Это не обязательно ошибка, но вы должны понимать, где какая версия работает
Мини-практика
Создайте файл version.php в корне сайта и выведите PHP_VERSION. Затем переключите PHP в терминале через update-alternatives и отдельно проверьте веб-сервер. Запишите две версии: “терминал” и “браузер”
Если у вас Nginx, дополнительно найдите строку fastcgi_pass в конфигурации сайта. Если у вас Apache, проверьте активные PHP-модули
apache2ctl -M | grep php
Частые ошибки
Переключили php в терминале и решили, что сайт тоже переключился. Для сайта нужно проверять Apache-модуль или PHP-FPM
Включили новый FPM, но Nginx продолжает смотреть на старый сокет. В результате сервис новой версии запущен, но не используется
Отключили старый Apache-модуль, но не включили новый. После перезапуска PHP-файлы перестают выполняться
Забыли поставить расширения для новой версии. Например, был php8.2-mysql, а после перехода на 8.3 нужен соответствующий пакет для новой ветки
Проверяют кэшированную страницу. После смены версии лучше открыть отдельный тестовый файл, а не сложную страницу CMS
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- Как включить нужную версию PHP: сайт, терминал, Apache и PHP-FPM
- Linux install PHP: установка PHP на Ubuntu и проверка окружения
- Timeweb: как изменить версию PHP на хостинге и проверить сайт
- Как выбрать версию PHP на FirstVDS и проверить сайт