Как установить 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, и приведите его к такому виду:

/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 через Nginx и PHP-FPM на Ubuntu 24.04: PHP Version 8.3.6, 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 -m

PHP-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-fpm
  • PHP 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, пользовательский кэш, установщики и журналы, к очистке 22,83 ГБ

Сборка мусора в 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.