Установка PHP при помощи apt: подробная инструкция

Раздел: Администрирование сервера -> Управление версиями PHP

Варианты установки PHP через apt

Как установить актуальную версию PHP из стандартного репозитория?

Наиболее простой способ для Debian/Ubuntu - использовать встроенный репозиторий. Команда apt install php установит версию, доступную по умолчанию. Например, в Ubuntu 22.04 это PHP 8.1.

sudo apt update
sudo apt install php

Apt get install php (установка php через apt)

Пояснение: После обновления списка пакетов выполняется установка PHP с минимальным набором модулей. Проверка версии:

php -v
# PHP 8.1.2-1ubuntu2.14 (cli) ...

изменить версию php (изменение версии php)

Возможная проблема: Недостаточно прав. Решение - добавить sudo или выполнять от root.

Ошибка: Пакет не найден. Тогда необходимо обновить репозитории (sudo apt update) или добавить сторонние репозитории (см. варианты ниже).

Как установить конкретную версию PHP, например 8.2 или 7.4?

Если нужна версия, отличная от стандартной, используется PPA ondrej/php.

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-common

Пояснение: После добавления PPA становятся доступными все основные версии PHP (7.4, 8.0, 8.1, 8.2, 8.3). Установка конкретного пакета (php8.2) позволяет сосуществовать нескольким версиям.

Проблема: Конфликт с ранее установленной версией. Решение - явно указывать версию при установке модулей, например php8.2-mysql.

Ошибка: PPA не поддерживается вашей версией ОС. Проверьте совместимость на launchpad.net.

Как установить PHP из исходников с помощью apt (сборка из сорсов)?

Экзотический вариант, когда необходимы особые параметры компиляции. Используется apt-get source и dpkg-buildpackage.

sudo apt build-dep php
deb-src http://archive.ubuntu.com/ubuntu/ jammy main  # добавить в sources.list
sudo apt update
apt-get source php
cd php8.1*
dpkg-buildpackage -uc -us
sudo dpkg -i ../php*.deb

Пояснение: Способ для тех, кто хочет изменить исходный код PHP перед установкой. Требует много времени и зависимостей для сборки.

Проблема: Ошибки зависимостей при сборке. Решение - доустановить недостающие пакеты из сообщений об ошибках.

Как управлять версиями PHP после установки нескольких?

Для переключения между версиями используется механизм update-alternatives.

sudo update-alternatives --config php
# Выбрать номер версии из списка

Пояснение: Команда показывает все установленные версии CLI. Выбор делается вводом цифры.

Проблема: Возможны конфликты модулей (разные версии для одних и тех же расширений). Решение - устанавливать расширения для каждой версии отдельно.

Расширенные примеры работы с PHP через apt

Установка нескольких версий PHP и их одновременное использование в Apache

Пример
sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-xml
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml

# Включить mod proxy_fcgi для Apache
sudo a2enmod proxy_fcgi

# Настроить виртуальные хосты (пример для /etc/apache2/sites-available/site.conf):
<VirtualHost *:80>
    ServerName site.local
    DocumentRoot /var/www/site
    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php8.2-fpm.sock|fcgi://localhost/var/www/site
</VirtualHost>

# Для другого сайта использовать php8.1
<VirtualHost *:80>
    ServerName site2.local
    DocumentRoot /var/www/site2
    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php8.1-fpm.sock|fcgi://localhost/var/www/site2
</VirtualHost>

sudo systemctl restart apache2

Результат: Два сайта на одном сервере используют разные версии PHP (8.1 и 8.2). Проверка через phpinfo() покажет соответствующую версию.

Установка PHP-расширений для специфических задач

Пример
# Для версии 8.2 установить расширение для Redis
sudo apt install php8.2-redis

# Для работы с изображениями (GD)
sudo apt install php8.2-gd

# Для ZIP
sudo apt install php8.2-zip

# Список всех доступных модулей для вашей версии
sudo apt-cache search php8.2-* | grep -E '^php8\.2'

Результат: После установки модули подключаются автоматически (для Apache через mod_php) или требуют перезапуска FPM.

Отладка: проверка конфигурации и поиск ошибок

Пример
# Проверить синтаксис PHP-файла
php -l /var/www/test.php
# Вывод: No syntax errors detected in /var/www/test.php

# Просмотр загруженных модулей
php -m | grep -i mysql
# Вывод: mysqli, pdo_mysql, mysqlnd

# Тестирование FPM-пула (для версии 8.2)
curl -I --unix-socket /run/php/php8.2-fpm.sock fcgi://localhost/status?json
# Ответ JSON с информацией о пуле

Компиляция собственного пакета с изменёнными параметрами

Пример
sudo apt build-dep php8.2
sudo apt source php8.2
cd php8.2-*
dpkg-buildpackage -us -uc -j$(nproc) # собрать все пакеты
sudo dpkg -i ../php8.2-common_*.deb ../php8.2-cli_*.deb ../libapache2-mod-php8.2_*.deb

Результат: В результате получается пакет, собранный с опциями по умолчанию. Если требуется изменить configure-файл, правки вносятся в debian/rules.

Автоматизация управления версиями через скрипты

Пример
#!/bin/bash
# Скрипт для установки PHP 8.2 с необходимыми модулями на Ubuntu
set -e

# Добавление PPA
sudo apt update && sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update

# Установка PHP 8.2 и расширений
sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl

# Настройка FPM для запуска от www-data
sudo sed -i 's/^user = .*/user = www-data/' /etc/php/8.2/fpm/pool.d/www.conf
sudo sed -i 's/^group = .*/group = www-data/' /etc/php/8.2/fpm/pool.d/www.conf
sudo systemctl restart php8.2-fpm

echo "PHP 8.2 установлен и запущен"

Выполнив скрипт: Система готова к работе с PHP 8.2, FPM работает на сокете /run/php/php8.2-fpm.sock.

Установка PHP через apt - comments

En
Apt get install php (php)