Процесс установки PHP на компьютере под управлением Linux
Установка PHP в Linux
PHP - один из ведущих языков для серверной веб-разработки. В окружении Linux существует несколько способов его установки. Ниже описаны основные варианты, их цели, пошаговые инструкции и типичные ошибки.
Как установить PHP наиболее простым и универсальным способом?
Для дистрибутивов на основе Debian (Ubuntu, Debian) используется пакетный менеджер apt. Команды:
sudo apt update
sudo apt install phpPhp 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-fpmLinux 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-commonPhp 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-mysqlndLinux версия 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-devAlt 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.12Linux установить 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