opened image

Как установить PHP 8.* - 5.* на Ubuntu 24.04

 

 

В этой статье мы рассмотрим как поставить стоковый PHP 8.3 из официальных репозиториев Ubuntu 24.04 (Noble) и параллельно держать несколько версий (включая 8.2…7.x и даже 5.6) через PPA Ondřej Surý. Разбирем варианты с Apache (mod_php и FPM) и Nginx (FPM), переключение версий для CLI, чек‑лист и блок «типовые ошибки → решения». Старые ветки (7.x/5.6) — EOL, используйте изолированно и осознанно.

 

 

Что ставить и когда

  • Нужен просто актуальный PHP → ставьте 8.3 из официальных репозиториев Ubuntu (без PPA).

  • Нужны несколько версий (например, 8.3+8.2 или даже 7.4/5.6 для легаси) → добавьте PPA ppa:ondrej/php и ставьте дополнительные ветки параллельно.

  • Веб‑сервер:

    • Apache: либо libapache2-mod-phpX.Y (просто, но одна версия на весь Apache), либо phpX.Y-fpm (гибко, можно разные версии на разные сайты).

    • Nginx: всегда phpX.Y-fpm.

Рекомендация: в продакшене предпочитайте поддерживаемые ветки (8.3/8.2). Легаси (7.x/5.6) изолируйте (контейнер/отдельный хост) и ограничивайте доступ.

 

 

Базовые пакеты и подготовка

sudo apt update
sudo apt install -y software-properties-common curl ca-certificates gnupg lsb-release

 

Проверьте релиз:

lsb_release -sd   # Ubuntu 24.04 LTS (Noble Numbat)

 

 

 

Используем официальный репозиторий

 

Установка PHP 8.3 (Apache модуль + CLI + типовые расширения)

sudo apt update
sudo apt install -y php libapache2-mod-php php-cli \
  php-mysql php-xml php-curl php-mbstring php-zip php-gd
php -v

 

 

Где искать php.ini:

  • Apache SAPI: /etc/php/8.3/apache2/php.ini

  • CLI: /etc/php/8.3/cli/php.ini

  • FPM (если поставите): /etc/php/8.3/fpm/php.ini

 

Переключение версии для CLI:

sudo update-alternatives --config php
php -v

 

 

Пока установлена одна ветка (8.3), выбор один. При добавлении других версий через PPA здесь появятся варианты.

 

 

 

Добавляем PPA Ondřej Surý (для нескольких версий, вплоть до 5.6)

PPA содержит ко‑инсталируемые пакеты phpX.Y-* для множества версий. Старые ветки (7.x/5.6) — EOL: держите их изолированно, обновляйте код по возможности.

 

Подключение PPA

sudo add-apt-repository -y ppa:ondrej/php
sudo apt update

 

Примеры установки нескольких веток параллельно

 

Apache c mod_php (простота, но одна версия на весь Apache)

# Устанавливаем 8.3, 8.2, 7.4 и 5.6 параллельно
sudo apt install -y \
  libapache2-mod-php8.3 php8.3-cli php8.3-mysql php8.3-xml php8.3-curl php8.3-mbstring php8.3-zip php8.3-gd \
  libapache2-mod-php8.2 php8.2-cli php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd \
  libapache2-mod-php7.4 php7.4-cli php7.4-mysql php7.4-xml php7.4-curl php7.4-mbstring php7.4-zip php7.4-gd \
  libapache2-mod-php5.6 php5.6-cli php5.6-mysql php5.6-xml php5.6-curl php5.6-mbstring php5.6-zip php5.6-gd

 

Переключение версии в Apache: (одновременно активен один модуль)

# выбрать 8.3
sudo a2dismod php8.2 php7.4 php5.6 2>/dev/null || true
sudo a2enmod  php8.3
sudo systemctl reload apache2

# выбрать 8.2
sudo a2dismod php8.3 php7.4 php5.6 2>/dev/null || true
sudo a2enmod  php8.2
sudo systemctl reload apache2

# выбрать 7.4
sudo a2dismod php8.3 php8.2 php5.6 2>/dev/null || true
sudo a2enmod  php7.4
sudo systemctl reload apache2

# выбрать 5.6 (для легаси, на свой риск)
sudo a2dismod php8.3 php8.2 php7.4 2>/dev/null || true
sudo a2enmod  php5.6
sudo systemctl reload apache2

 

Apache/Nginx с PHP‑FPM (гибко: разным сайтам — разные версии)

sudo apt install -y \
  php8.3-fpm php8.2-fpm php7.4-fpm php5.6-fpm \
  php8.3-mysql php8.2-mysql php7.4-mysql php5.6-mysql \
  php8.3-xml   php8.2-xml   php7.4-xml   php5.6-xml \
  php8.3-curl  php8.2-curl  php7.4-curl  php5.6-curl \
  php8.3-mbstring php8.2-mbstring php7.4-mbstring php5.6-mbstring \
  php8.3-zip   php8.2-zip   php7.4-zip   php5.6-zip \
  php8.3-gd    php8.2-gd    php7.4-gd    php5.6-gd

 

Пулы слушают сокет (по умолчанию):

  • 8.3: /run/php/php8.3-fpm.sock

  • 8.2: /run/php/php8.2-fpm.sock

  • 7.4: /run/php/php7.4-fpm.sock

  • 5.6: /run/php/php5.6-fpm.sock

 

Активируйте нужные модули и сайт:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpm   # создаёт стандартный мэпинг, если требуется
sudo a2ensite app82.local
sudo systemctl reload apache2

 

Не забудьте перезапустить/перезагрузить сервисы:

sudo systemctl reload nginx || true
sudo systemctl reload apache2 || true
sudo systemctl restart php8.3-fpm php8.2-fpm php7.4-fpm php5.6-fpm

 

Переключение версии CLI

sudo update-alternatives --config php
php -v

 

 

Аналогично можно выбрать phar/phar.phar.

 

 

 

Где править настройки и смотреть модули

 

php.ini (типовые пути):

  • Apache: /etc/php/<версия>/apache2/php.ini

  • FPM: /etc/php/<версия>/fpm/php.ini

  • CLI: /etc/php/<версия>/cli/php.ini

 

Популярные параметры:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 60

 

После правок:

sudo systemctl reload apache2 2>/dev/null || true
sudo systemctl restart php8.3-fpm php8.2-fpm php7.4-fpm php5.6-fpm 2>/dev/null || true

 

Список загруженных модулей:

php -m | sort
php8.2 -m | sort
php7.4 -m | sort
php5.6 -m | sort

 

 

Безопасность и эксплуатация

  • Для Apache mod_php единовременно активна одна версия на весь веб‑сервер. Для разных версий на разных сайтах используйте FPM или изоляцию (контейнеры/отдельные инстансы).

  • Старые ветки 7.x/5.6 — EOL: ограничивайте доступ, выключайте лишние модули, мониторьте уязвимости, планируйте миграцию к 8.x.

  • Минимизируйте набор расширений: ставьте только используемые модули.

  • Удаляйте phpinfo() после проверки, не держите его в продакшене.

 

 

Типовые ошибки → быстрые решения

  • PHP файл скачивается вместо выполнения (Apache): не активирован модуль. apache2ctl -M | grep phpa2enmod phpX.Y, перезагрузка.

  • Веб показывает “не ту” версию: отключите старую a2dismod php*, включите нужную a2enmod phpX.Y, systemctl reload apache2.

  • Nginx: 502 Bad Gateway: неверный сокет/порт FPM. Проверьте fastcgi_pass и что пул запущен: systemctl status phpX.Y-fpm.

  • CLI не переключается: sudo update-alternatives --config php.

  • Расширение “не видитcя”: поставьте модуль для той же ветки, что выполняет код (php7.4-xmlphp-xml). Перезапустите FPM/Apache.

  • Конфликт .htaccess/директив: проверьте AllowOverride и при необходимости задайте параметры в <VirtualHost> или php.ini нужной SAPI.

  • Папка сессий/кэша недоступна: проверьте владельца/права (для FPM — пользователь пула, по умолчанию www-data).

 

 

Чек‑лист перед продакшн‑запуском

  • Установлены требуемые версии PHP и нужные расширения.

  • Для Apache: выбран режим (mod_php или FPM); активна только нужная версия/модуль.

  • Для Nginx: корректно прописан fastcgi_pass к верной версии FPM.

  • php.ini/пулы FPM настроены (лимиты, часовой пояс, логи).

  • Проверено phpinfo() для каждого сайта/пула; файлы удалены.

  • update-alternatives выбран для CLI, если нужно.

  • Логи ошибок чисты, мониторинг включён (systemd‑юниты, access/error‑логи, метрики).

  • Для 7.x/5.6 оформлены отдельные меры безопасности и план миграции.

 

 

Итоги

 

На Ubuntu 24.04 вы можете: (1) быстро поставить PHP 8.3 из официальных репозиториев; (2) через PPA ondrej/php добавить параллельно нужные ветки до 7.x/5.6, выбирая режим Apache (mod_php или FPM) либо Nginx (FPM). Для удобства — update-alternatives для CLI, для гибкости — FPM с разными пулами. Старые версии поддерживайте только изолированно и планируйте обновление к 8.x.