Процесс установки PHP на компьютере под управлением Linux

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

Установка PHP в Linux

PHP - один из ведущих языков для серверной веб-разработки. В окружении Linux существует несколько способов его установки. Ниже описаны основные варианты, их цели, пошаговые инструкции и типичные ошибки.

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

Для дистрибутивов на основе Debian (Ubuntu, Debian) используется пакетный менеджер apt. Команды:

sudo apt update
sudo apt install php

Php fpm linux (настройка php-fpm в linux)

После установки проверяется версия:

php -v
PHP 8.2.12 (cli) (built: Nov  8 2023 10:34:37) ( NTS )

Php oracle linux (установка php на oracle linux)

Если нужна определённая версия или дополнительные расширения, следует добавить репозиторий ppa:ondrej/php:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-mysql php8.2-fpm

Linux apache php (настройка apache и php в linux)

Возможная проблема:

При выполнении sudo apt install php может быть предложена устаревшая версия или пакет не найден. Решение - предварительно выполнить sudo apt update и, при необходимости, подключить сторонний PPA.

Как установить PHP на CentOS, RHEL или Fedora?

В дистрибутивах на основе RPM используется yum или dnf. Базовая установка:

sudo dnf install php php-cli php-common

Php mysql linux (установка php и mysql в linux)

Репозиторий Remi предоставляет более свежие версии:

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf module reset php
sudo dnf module enable php:remi-8.2
sudo dnf install php php-cli php-fpm php-mysqlnd

Linux версия php (проверка версии php в linux)

Типичная ошибка:

После включения модуля Remi может возникнуть конфликт с уже установленным пакетом из стандартного репозитория. Решение - удалить старый PHP перед установкой: sudo dnf remove php*.

Как собрать PHP из исходного кода с нестандартными параметрами?

Компиляция позволяет задать любые опции сборки. Сначала устанавливаются зависимости:

sudo apt install build-essential autoconf libxml2-dev libsqlite3-dev libssl-dev libcurl4-openssl-dev libonig-dev libzip-dev

Alt linux php (установка php на alt linux)

Загрузка и распаковка исходников:

wget https://www.php.net/distributions/php-8.2.12.tar.gz
tar xzf php-8.2.12.tar.gz
cd php-8.2.12

Linux установить php (установка php в linux)

Конфигурирование с нужными расширениями:

./configure --prefix=/usr/local/php8.2 --with-config-file-path=/usr/local/php8.2/etc --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-pdo-mysql --with-mysqli --with-openssl --with-curl --enable-mbstring --with-zip --with-gd --with-onig --enable-intl --enable-bcmath --with-xmlrpc --with-imap --with-kerberos --with-imap-ssl

Сборка и установка:

make -j$(nproc)
sudo make install

Распространённые проблемы:

  • configure: error: iconv is required - установите libiconv-dev или libc6-dev.
  • make: command not found - установите пакет build-essential.
  • Ошибка линковки - возможно, не хватает библиотек разработки, используйте apt build-dep php.

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

Phpbrew - менеджер версий PHP, позволяющий устанавливать и переключаться между разными сборками. Установка самого инструмента:

curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
chmod +x phpbrew.phar
sudo mv phpbrew.phar /usr/local/bin/phpbrew

Инициализация и список доступных версий:

phpbrew init
phpbrew known

Установка PHP 8.2 с расширениями:

phpbrew install 8.2.0 +default +pdo +mysql +fpm +openssl +mbstring +gd +zip +intl

После завершения активация версии:

phpbrew switch 8.2.0
php -v

Сложности:

Сборка может требовать много времени и ресурсов. Если не хватает библиотек, phpbrew подскажет недостающие зависимости (например, sudo apt install libxml2-dev). При ошибке Unable to find php version проверьте интернет-соединение.

Как изолировать PHP-окружение с помощью Docker?

Docker позволяет запускать PHP в контейнере без установки на хост. Пример запуска PHP-FPM:

docker run -d --name php-fpm -p 9000:9000 php:8.2-fpm

Создание кастомного образа с расширениями (Dockerfile):

FROM php:8.2-fpm
RUN docker-php-ext-install pdo_mysql mysqli gd zip intl opcache
COPY php.ini /usr/local/etc/php/

Сборка и запуск:

docker build -t my-php .
docker run -d --name my-php -p 9000:9000 my-php

Типичные проблемы:

  • Порт 9000 уже занят - измените host-порт: -p 9001:9000.
  • Контейнер не стартует - просмотрите логи: docker logs my-php.
  • Расширение не установилось - проверьте правильность имени расширения в docker-php-ext-install.

Общие проблемы и решения при установке PHP

  • Команда php не найдена - либо PHP не установлен, либо он находится вне PATH. Проверьте установку и пропишите путь в ~/.bashrc (export PATH=/usr/local/php/bin:$PATH).
  • Не удалось найти пакет php - добавьте соответствующий репозиторий (например, PPA или Remi) и обновите список пакетов.
  • Конфликт версий при нескольких репозиториях - отключите или сбросьте модули PHP, удалите дублирующиеся пакеты.
  • PHP-FPM не запускается - проверьте синтаксис конфигурации (php-fpm -t), права на socket/pid файл, а также свободный порт.
  • Расширение не загружается - убедитесь, что оно включено в php.ini (строка extension=имя.so) и что файл модуля существует.
  • Ошибка компиляции undefined reference - установите недостающие пакеты разработки, например, libssl-dev для OpenSSL.

Расширенные примеры установки и настройки PHP

Ниже приведены подробные сценарии, которые могут потребоваться в нестандартных ситуациях.

1. Сборка PHP 8.2 с полным набором расширений и настройка php.ini для продакшена

Пример
# Установка всех зависимостей для сборки
sudo apt update
sudo apt install -y build-essential autoconf libtool bison re2c libxml2-dev libsqlite3-dev \
    libssl-dev libcurl4-openssl-dev libonig-dev libzip-dev libgd-dev libfreetype6-dev \
    libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev libintl-dev libicu-dev \
    libpcre3-dev libbz2-dev libgmp-dev libmpc-dev libmpfr-dev libmhash-dev \
    libmemcached-dev libedit-dev libncurses5-dev libreadline-dev libpq-dev libmysqlclient-dev

# Скачивание и распаковка
wget https://www.php.net/distributions/php-8.2.12.tar.gz
tar xzf php-8.2.12.tar.gz
cd php-8.2.12

# Конфигурация с расширенными опциями
./configure --prefix=/usr/local/php8.2 \
    --with-config-file-path=/usr/local/php8.2/etc \
    --with-config-file-scan-dir=/usr/local/php8.2/etc/conf.d \
    --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data \
    --disable-cgi --enable-cli \
    --with-mysqli --with-pdo-mysql --with-pdo-pgsql --with-pgsql \
    --with-openssl --with-curl --with-gd --with-freetype --with-jpeg --with-webp \
    --enable-mbstring --with-onig --with-zip --with-bz2 --with-gmp \
    --enable-intl --enable-bcmath --enable-calendar --enable-exif --enable-ftp \
    --enable-sockets --enable-soap --enable-xmlreader --enable-xmlwriter \
    --with-xsl --with-gettext --with-ldap --with-ldap-sasl --with-mhash \
    --with-memcached --with-readline --with-libedit --enable-pcntl --enable-shmop \
    --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-zend-signals \
    --enable-opcache --enable-huge-code-pages --enable-dtrace

# Сборка (4 потока)
make -j$(nproc) && sudo make install

# Копирование php.ini
sudo cp php.ini-production /usr/local/php8.2/etc/php.ini

# Настройка php.ini для продакшена
sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /usr/local/php8.2/etc/php.ini
sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' /usr/local/php8.2/etc/php.ini
sudo sed -i 's/post_max_size = 8M/post_max_size = 64M/' /usr/local/php8.2/etc/php.ini
sudo sed -i 's/max_execution_time = 30/max_execution_time = 300/' /usr/local/php8.2/etc/php.ini
sudo sed -i 's/disable_functions =/disable_functions = exec,shell_exec,system,passthru,proc_open,show_source/' /usr/local/php8.2/etc/php.ini
sudo sed -i 's/expose_php = On/expose_php = Off/' /usr/local/php8.2/etc/php.ini

Проверка собранного PHP:

/usr/local/php8.2/bin/php -v
/usr/local/php8.2/bin/php -m | grep -E 'mbstring|gd|pdo_mysql|opcache|intl|bcmath'

2. Установка двух версий PHP (7.4 и 8.2) с помощью phpbrew и настройка FPM

Пример
# Установка phpbrew (если ещё не установлен)
curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
chmod +x phpbrew.phar
sudo mv phpbrew.phar /usr/local/bin/phpbrew

# Инициализация и установка зависимостей для сборки
phpbrew init
phpbrew known --update

# Установка PHP 7.4
phpbrew install 7.4.33 +default +pdo +mysql +fpm +gd +mbstring +zip +intl +opcache +openssl +xmlrpc

# Установка PHP 8.2
phpbrew install 8.2.12 +default +pdo +mysql +fpm +gd +mbstring +zip +intl +opcache +openssl

# Переключение на версию 8.2
phpbrew switch 8.2.12

# Настройка FPM для каждой версии (создание отдельных конфигов)
cp ~/.phpbrew/php/php-8.2.12/etc/php-fpm.d/www.conf ~/.phpbrew/php/php-8.2.12/etc/php-fpm.d/dedicated.conf
# В dedicated.conf изменить listen на /var/run/php8.2-fpm.sock

# Запуск FPM для версии 8.2
~/.phpbrew/php/php-8.2.12/sbin/php-fpm --daemonize --pid /var/run/php8.2-fpm.pid

# Аналогично для версии 7.4 (с другим портом сокета)
~/.phpbrew/php/php-7.4.33/sbin/php-fpm --daemonize --pid /var/run/php7.4-fpm.pid

Проверка активных процессов и версий:

ps aux | grep php-fpm
phpbrew list
php -v   # текущая активная версия

3. Docker Compose для PHP 8.2 FPM + Nginx + MySQL

Пример
# docker-compose.yml
version: '3.8'
services:
  php:
    image: php:8.2-fpm
    container_name: php-app
    volumes:
      - ./app:/var/www/html
      - ./php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - db
    networks:
      - app-network

  nginx:
    image: nginx:stable
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./app:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    networks:
      - app-network

  db:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: app_db
      MYSQL_USER: user
      MYSQL_PASSWORD: userpass
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
volumes:
  db_data:

Запуск и проверка:

docker-compose up -d
docker-compose ps
docker exec php-app php -v

4. Установка PHP 8.2 на CentOS 8 через Remi с дополнительными расширениями

Пример
# Установка репозитория Remi
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

# Сброс модуля и включение PHP 8.2 из Remi
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.2 -y

# Установка PHP и расширений
sudo dnf install -y php php-cli php-fpm php-mysqlnd php-gd php-bcmath php-xml php-mbstring php-zip php-intl php-opcache php-curl php-json php-common php-pear php-devel

# Проверка
php -v
php -m | grep -E 'pdo_mysql|bcmath|intl'

Вывод после установки:

PHP 8.2.12 (cli) (built: Nov 15 2023 10:58:44) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.12, Copyright (c), by Zend Technologies

Установка PHP в Linux - comments

En
Linux установить php (php)