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. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x