Полное описание установки седьмой версии PHP для серверов
Основные подходы к установке PHP 7.4
Как выполнить установку PHP 7.4 из официального репозитория?
Этот способ подходит для большинства серверов на базе Debian/Ubuntu или CentOS/RHEL с использованием пакетных менеджеров. Установка из репозитория обеспечивает простоту обновления и автоматическое разрешение зависимостей.
Для Ubuntu 20.04 и новее PHP 7.4 доступен в стандартном репозитории. Для более старых версий или CentOS подключается сторонний PPA (Ondřej Surý) или Remi.
# Ubuntu / Debian
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php7.4 php7.4-cli php7.4-fpm php7.4-mysql php7.4-xml php7.4-mbstring -y
# CentOS / RHEL 7/8 (через Remi)
sudo yum install epel-release -y
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y # для CentOS 7
sudo yum-config-manager --enable remi-php74
sudo yum install php php-cli php-fpm php-mysqlnd php-xml php-mbstring -y
установка php 7.4 (установка php версии 7.4)
После установки следует проверить версию: php -v. Для PHP-FPM запускается служба: sudo systemctl start php7.4-fpm (или php-fpm в CentOS).
Типичная ошибка: Package php7.4 is not available. Решение: обновить списки пакетов (sudo apt update) или подключить правильный PPA. В CentOS убедиться, что репозиторий Remi включён и нет конфликта с другими версиями PHP (удалить старые: sudo yum remove php*).
Каким образом собрать PHP 7.4 из исходных кодов?
Сборка из исходного кода применяется, когда требуется нестандартная конфигурация (например, специфические расширения, статическая сборка) или для окружений без доступа к пакетам. Процесс требует времени и наличия компилятора и библиотек.
# Загрузка исходного кода
wget https://www.php.net/distributions/php-7.4.33.tar.gz
tar xzf php-7.4.33.tar.gz
cd php-7.4.33
# Установка зависимостей (Ubuntu)
sudo apt install build-essential autoconf libxml2-dev libsqlite3-dev libssl-dev libcurl4-openssl-dev libonig-dev libreadline-dev -y
# Конфигурация и сборка
./configure --prefix=/usr/local/php7.4 --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-mbstring --enable-fpm --with-curl --with-zlib --with-readline
make -j$(nproc)
sudo make install
# Копирование конфигурационных файлов
sudo cp php.ini-production /usr/local/php7.4/lib/php.ini
sudo cp /usr/local/php7.4/etc/php-fpm.conf.default /usr/local/php7.4/etc/php-fpm.conf
установка php расширений (установка расширений php)
Для использования с веб-сервером (Nginx/Apache) потребуется настроить PHP-FPM и указать сокет.
Ошибка: configure: error: xml2-config not found. Установить libxml2-dev. При нехватке памяти на сборку (virtual memory exhausted) увеличить swap или уменьшить количество потоков -j1.
Как использовать Docker для изолированной установки PHP 7.4?
Docker позволяет быстро развернуть PHP 7.4 в изолированном контейнере без влияния на основную систему. Подходит для разработки, тестирования или микросервисной архитектуры.
# Dockerfile
FROM php:7.4-fpm
RUN docker-php-ext-install pdo_mysql mysqli mbstring xml
# Запуск контейнера
docker build -t my-php74 .
docker run -d -p 9000:9000 --name php74 my-php74
Для подключения к Nginx можно использовать Docker Compose, связывая контейнеры.
Проблема: контейнер не стартует, порт 9000 занят. Решение: изменить порт на хосте (-p 9001:9000) или остановить другую службу. Ошибка: php7.4-fpm: unrecognized service - использование образа php:7.4-fpm уже включает FPM.
Какие особенности установки PHP 7.4 на разных дистрибутивах?
На Arch Linux установка производится через pacman: sudo pacman -S php74 php74-fpm. На openSUSE: sudo zypper install php7 php7-fpm php7-mysql. Для Alpine Linux (Docker) используется apk add php7 php7-fpm php7-mysqli.
Цель: адаптация под конкретный пакетный менеджер. Важно помнить, что названия пакетов могут отличаться (php7.4 против php74).
Расширенные примеры установки PHP 7.4
# Полная автоматизированная сборка PHP 7.4 с дополнительными расширениями
# (включая intl, gd, zip, imagick) и поддержкой FPM
#!/bin/bash
PHP_VERSION="7.4.33"
INSTALL_PREFIX="/opt/php7.4"
# Загрузка и распаковка
wget "https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz"
tar -xf "php-${PHP_VERSION}.tar.gz"
cd "php-${PHP_VERSION}"
# Установка зависимостей (Debian/Ubuntu)
sudo apt-get install -y build-essential autoconf bison re2c \
libxml2-dev libsqlite3-dev libssl-dev libcurl4-openssl-dev \
libonig-dev libreadline-dev libzip-dev libpng-dev libjpeg-dev \
libfreetype6-dev libwebp-dev libxpm-dev libicu-dev libgmp-dev \
libmagic-dev libmagickwand-dev
# Конфигурация с включением популярных расширений
./configure \
--prefix=${INSTALL_PREFIX} \
--with-config-file-path=${INSTALL_PREFIX}/etc \
--with-config-file-scan-dir=${INSTALL_PREFIX}/etc/conf.d \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-curl \
--with-zlib \
--with-readline \
--enable-mbstring \
--enable-bcmath \
--enable-soap \
--enable-sockets \
--with-gd \
--with-freetype-dir=/usr \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-webp-dir=/usr \
--with-xpm-dir=/usr \
--with-zip \
--with-mhash \
--with-gmp \
--with-imagick=/usr/local \
--enable-intl \
--with-libxml-dir=/usr
make -j$(nproc)
sudo make install
# Создание конфига
sudo mkdir -p ${INSTALL_PREFIX}/etc/conf.d
sudo cp php.ini-production ${INSTALL_PREFIX}/etc/php.ini
sudo cp ${INSTALL_PREFIX}/etc/php-fpm.conf.default ${INSTALL_PREFIX}/etc/php-fpm.conf
# Настройка PHP-FPM
sudo cp ${INSTALL_PREFIX}/etc/php-fpm.d/www.conf.default ${INSTALL_PREFIX}/etc/php-fpm.d/www.conf
# Результат
${INSTALL_PREFIX}/bin/php -v
PHP 7.4.33 (cli) (built: Dec 10 2023 12:00:00) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies
# Docker Compose для связки Nginx + PHP 7.4 + MySQL
# docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
volumes:
- ./app:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
depends_on:
- php-fpm
php-fpm:
build:
context: .
dockerfile: Dockerfile.php
volumes:
- ./app:/var/www/html
environment:
MYSQL_HOST: db
MYSQL_USER: user
MYSQL_PASSWORD: pass
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: pass
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
# Dockerfile.php (используется в compose)
FROM php:7.4-fpm
RUN docker-php-ext-install pdo_mysql mysqli mbstring exif pcntl bcmath gd
WORKDIR /var/www/html
COPY --chown=www-data:www-data . /var/www/html
# Вывод php -m на запущенном контейнере (сокращённый) [PHP Modules] bcmath Core ctype curl date dom exif fileinfo filter ftp gd gethostbyaddr glob hash iconv intl json libxml mbstring mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix readline Reflection session shmop SimpleXML sockets sodium SPL standard sysvsem tokenizer xml xmlreader xmlwriter Zend OPcache zip zlib [Zend Modules] Zend OPcache
# Пример настройки пула PHP-FPM для обработки запросов через Unix-сокет
# /etc/php/7.4/fpm/pool.d/www.conf (после установки из PPA)
[www]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
# Проверка статуса пула (после перезапуска) $ sudo systemctl status php7.4-fpm ● php7.4-fpm.service - PHP 7.4 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-01-15 10:30:00 UTC; 1h ago Main PID: 12345 (php-fpm7.4) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0 req/sec"