Установка PHP при помощи apt: подробная инструкция
Варианты установки PHP через apt
Как установить актуальную версию PHP из стандартного репозитория?
Наиболее простой способ для Debian/Ubuntu - использовать встроенный репозиторий. Команда apt install php установит версию, доступную по умолчанию. Например, в Ubuntu 22.04 это PHP 8.1.
sudo apt update
sudo apt install phpApt 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.