Полное описание установки седьмой версии 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"

Установка PHP версии 7.4 - comments

En
установка php 7.4 (php)