Как установить PHP на Ubuntu 24
Чтобы установить PHP на Ubuntu, хватает пакетов из репозитория самой Ubuntu: в 24.04 это PHP 8.3, в 22.04 — PHP 8.1. Здесь PHP настраивается так, как его запускает большинство серверов с Nginx, — через PHP-FPM. Ещё ниже — расширения, где искать php.ini и откуда взять другую версию, если версия из Ubuntu устарела.
Как установить PHP на Ubuntu через apt
Для сайта за Nginx нужны два пакета: php-fpm — служба, которая выполняет PHP для веб-сервера, и php-cli — команда php для скриптов и Composer. Оба ставят ту версию, что идёт с вашей Ubuntu.
sudo apt update
sudo apt install -y php-fpm php-cli
php -v
systemctl status php8.3-fpm --no-pagerПроверка версии покажет, например, PHP 8.3.6 (cli). В состоянии службы должно быть Active: active (running). В Ubuntu 22.04 служба называется php8.1-fpm, и все 8.3 в этой инструкции меняются на 8.1.
Не начинайте с голого пакета php. Пока PHP-FPM нет, этот пакет тянет модуль для Apache, а с ним и сам Apache, который потом спорит с Nginx за порт 80.
Как подключить PHP-FPM к Nginx
Сам Nginx PHP не выполняет: запросы к .php он передаёт в PHP-FPM через файл-сокет. Если Nginx на сервере ещё нет, начните с установки Nginx на Ubuntu. Затем откройте файл своего сайта, например /etc/nginx/sites-available/example.com, и приведите его к такому виду:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}Файл snippets/fastcgi-php.conf идёт вместе с Nginx из Ubuntu. В имени сокета есть версия PHP. Какая она на вашем сервере, покажет команда:
ls /run/php/Теперь добавьте проверочную страницу, проверьте настройки и перечитайте их в Nginx:
echo '<?php phpinfo();' | sudo tee /var/www/example.com/info.php
sudo nginx -t
sudo systemctl reload nginxОткройте http://example.com/info.php. На странице будет версия PHP, а в строке Server API — FPM/FastCGI.

Страница phpinfo показывает настройки сервера всем, кто её откроет. Удалите её, как только посмотрели. Эта команда удалит только проверочный файл: sudo rm /var/www/example.com/info.php
Как поставить расширения PHP
Расширения — отдельные пакеты с именами php-<имя>. Такие имена берут версию PHP, которая в Ubuntu по умолчанию. Для конкретной версии пишите php8.3-<имя>. Вот те, что чаще всего просят фреймворки и CMS:
sudo apt install -y php-mysql php-pgsql php-curl php-mbstring php-xml php-zip php-gd php-intl php-bcmath
sudo systemctl restart php8.3-fpm
php -mPHP-FPM подхватывает расширения только при запуске, поэтому после установки его нужно перезапустить. Последняя команда выводит расширения, которые видит командная строка. Чтобы выключить установленное расширение, например intl:
sudo phpdismod intlА чтобы включить его снова:
sudo phpenmod intlГде лежит php.ini в Ubuntu
У каждого способа запуска PHP в Ubuntu свой php.ini, и настройка из одного файла в другой не попадает:
/etc/php/8.3/fpm/php.ini— для сайтов, которые работают через PHP-FPM./etc/php/8.3/cli/php.ini— для командыphp, заданий cron и Composer./etc/php/8.3/mods-available/— по маленькому ini-файлу на расширение./etc/php/8.3/fpm/pool.d/www.conf— пул FPM: пользователь, сокет и число процессов.
Какой файл читает командная строка, покажет команда:
php --iniДля сайта смотрите строку Loaded Configuration File на странице phpinfo. После правки файла FPM примените её:
sudo systemctl restart php8.3-fpmЧастые правки разобраны в статье как увеличить memory_limit в PHP.
Как проверить и переключить версию PHP
Версию командной строки и все установленные версии покажут команды:
php -v
ls /etc/php/Ubuntu держит одну версию PHP, пока жив выпуск системы. За более новой обычно идут в PPA ppa:ondrej/php. Это сторонний репозиторий: его ведёт Ondřej Surý, который сопровождает и пакеты PHP в Debian, и к Ubuntu или php.net он не относится. Подключайте его, только если эта версия правда нужна.
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.4-fpm php8.4-cli php8.4-mysqlВерсии живут рядом, у каждой своя служба и свой сокет. Чтобы перевести сайт на новую, поменяйте fastcgi_pass на unix:/run/php/php8.4-fpm.sock и перечитайте настройки Nginx. Команда php переключается сама: в автоматическом режиме она берёт самую новую версию, здесь 8.4. Чтобы выбрать другую:
sudo update-alternatives --config php
php -vНа странице PPA сказано, что он переезжает на packages.sury.org. Прочитайте заметки на его странице в Launchpad, прежде чем подключать, и ставьте расширения с той же версией в имени (php8.4-curl).
Если PHP не работает
- Браузер скачивает файл
.phpили показывает его код — в настройках сайта нет блокаlocation ~ \.php$или Nginx не перечитал их. Проверьте настройки:sudo nginx -tЗатем перечитайте их:sudo systemctl reload nginx 502 Bad Gateway, а в журнале Nginx —connect() to unix:/run/php/php8.1-fpm.sock failed (2: No such file or directory). Значит, вfastcgi_passне та версия сокета или PHP-FPM остановлен. Посмотрите, какие сокеты есть:ls /run/php/Затем проверьте службу:systemctl status php8.3-fpmPHP Fatal error: Uncaught Error: Call to undefined function mysqli_connect()— нет расширения MySQL. Поставьтеphp-mysqlи перезапустите PHP-FPM.- Правка в php.ini ничего не меняет — исправлен файл
cliвместоfpmили PHP-FPM не перезапущен. - В остальных случаях читайте журнал Nginx:
sudo tail -n 50 /var/log/nginx/error.logЗатем журнал PHP-FPM:sudo journalctl -u php8.3-fpm -n 50
Если вы работаете и на Mac

Сборка мусора в MacWashing находит кэш всех знакомых ей программ, в том числе спрятанный внутри их данных, а ещё журналы, мусор Xcode и остатки удалённых программ. Она показывает, сколько места занимает каждая находка, и очищает всё за один раз. Всё спорное остаётся без галочки, пока вы не решите.
Бесплатная пробная версия · macOS 14 и новее
Вопросы и ответы
Как установить PHP на Ubuntu?
Обновите список пакетов: sudo apt update Затем поставьте PHP: sudo apt install php-fpm php-cli На Ubuntu 24.04 встанет PHP 8.3, на 22.04 — PHP 8.1, и служба FPM сразу запустится.
Нужен ли Apache, чтобы работал PHP?
Нет. С PHP-FPM запросы к PHP передаёт Nginx через сокет. Apache появится, только если поставить пакет php раньше любого FPM или попросить libapache2-mod-php.
Можно ли держать на сервере две версии PHP?
Да. У каждой версии своя служба php8.x-fpm и свой сокет, так что у каждого сайта может быть своя. Команда php берёт ту, что выбрана через update-alternatives.