Инструкция по развертыванию PHP на сервере
Установка и настройка PHP: основные подходы
Как установить PHP 8.2 на Ubuntu 22.04 с минимальными усилиями и полным контролем над версиями?
Наиболее эффективное решение для большинства серверов под управлением Linux - использование официального репозитория ondrej/php, который поддерживает множество версий PHP (7.4, 8.0, 8.1, 8.2, 8.3) и автоматически обновляется. Ниже приведён пошаговый процесс.
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-gd php8.2-bcmath php8.2-zip
Php сервер для windows (php сервер для windows)
После установки рекомендуется проверить версию и список модулей:
php -v
php -m
где скачать php (где скачать php)
Для настройки PHP-FPM (FastCGI Process Manager) обычно редактируют файл /etc/php/8.2/fpm/php.ini. Например, увеличивают лимит памяти:
; /etc/php/8.2/fpm/php.ini
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 25M
установка и настройка php (установка и настройка php)
После изменений необходимо перезапустить FPM:
sudo systemctl restart php8.2-fpm
Install php ubuntu (установка php на ubuntu)
Почему при установке возникает ошибка «E: Unable to locate package php8.2»?
Чаще всего репозиторий ondrej/php не добавлен или не выполнен apt update. Другая причина - использование устаревшей версии Ubuntu (например, 18.04), где данная PPA не поддерживается. Решение: проверить версию ОС командой lsb_release -a и при необходимости перейти на более новую дистрибутив или использовать другие источники.
Как установить PHP из исходных кодов, если требуется нестандартная конфигурация?
Сборка из исходников даёт полный контроль над опциями компиляции, но требует больше времени и зависимостей. Типичные случаи - встраивание PHP в другое приложение или использование редких расширений.
# Установка зависимостей для сборки
sudo apt install -y build-essential autoconf libtool libssl-dev libxml2-dev libsqlite3-dev libcurl4-openssl-dev libonig-dev pkg-config
# Скачивание исходного кода PHP 8.2.15
wget https://www.php.net/distributions/php-8.2.15.tar.gz
tar xzf php-8.2.15.tar.gz
cd php-8.2.15
# Конфигурация с нужными опциями
./configure --prefix=/usr/local/php8.2 \
--with-config-file-path=/etc/php8.2 \
--with-fpm-user=www-data --with-fpm-group=www-data \
--enable-fpm --with-mysqli --with-pdo-mysql --with-openssl --with-zlib --enable-mbstring --enable-xml --with-curl
make -j$(nproc)
sudo make install
После установки необходимо скопировать конфигурационные файлы:
sudo cp php.ini-development /etc/php8.2/php.ini
sudo cp sapi/fpm/php-fpm.conf /etc/php8.2/php-fpm.conf
sudo cp sapi/fpm/www.conf /etc/php8.2/php-fpm.d/www.conf
Запуск FPM:
/usr/local/php8.2/sbin/php-fpm --daemonize
Почему при сборке возникает ошибка «configure: error: mcrypt.h not found»?
Расширение mcrypt удалено из PHP 7.2 и выше. Если используется старая версия, надо установить libmcrypt-dev и добавить опцию --with-mcrypt. Для современных версий лучше заменить на sodium или openssl.
Как установить несколько версий PHP параллельно с помощью phpbrew?
Инструмент phpbrew позволяет управлять несколькими версиями PHP в домашней директории пользователя. Подходит для разработчиков, которым нужно переключаться между версиями для тестирования.
# Установка 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
# Установка PHP 8.1 с модулями
phpbrew install 8.1 +default +mysql +xml +mbstring +curl +gd
# Переключение на версию 8.1
phpbrew use 8.1
php -v
Для автоматической загрузки нужной версии в сессии bash:
echo 'source ~/.phpbrew/bashrc' >> ~/.bashrc
Как установить PHP через Docker для изолированного окружения?
Использование Docker-контейнера - быстрый способ получить PHP с любыми расширениями без загрязнения хост-системы. Подходит для CI/CD или локальной разработки.
docker pull php:8.2-fpm
docker run -d --name myphp -v "$PWD":/var/www/html -p 9000:9000 php:8.2-fpm
Для установки дополнительных расширений внутри контейнера создают Dockerfile:
FROM php:8.2-fpm
RUN docker-php-ext-install pdo_mysql mysqli gd zip
COPY custom.ini /usr/local/etc/php/conf.d/custom.ini
Почему при подключении к MySQL через PDO возникает ошибка «could not find driver»?
Это значит, что не установлен модуль pdo_mysql. В Ubuntu через пакетный менеджер: sudo apt install php8.2-mysql. При сборке из исходников: добавить опцию --with-pdo-mysql. В Docker: docker-php-ext-install pdo_mysql.
Расширенные примеры установки и настройки PHP
1. Полная установка PHP 8.2 с Nginx через FPM на Ubuntu 22.04
Пример демонстрирует пошаговую настройку с конфигурацией под высоконагруженный проект.
# 1. Добавление PPA и установка PHP с расширениями
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-gd php8.2-bcmath php8.2-zip php8.2-intl php8.2-opcache
# 2. Оптимизация php.ini для продакшена
sudo cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.backup
sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini
sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/' /etc/php/8.2/fpm/php.ini
sudo sed -i 's/post_max_size = 8M/post_max_size = 55M/' /etc/php/8.2/fpm/php.ini
sudo sed -i 's/max_execution_time = 30/max_execution_time = 120/' /etc/php/8.2/fpm/php.ini
# 3. Настройка пула FPM (www.conf) для обработки большого количества запросов
sudo sed -i 's/pm.max_children = 5/pm.max_children = 50/' /etc/php/8.2/fpm/pool.d/www.conf
sudo sed -i 's/pm.start_servers = 2/pm.start_servers = 10/' /etc/php/8.2/fpm/pool.d/www.conf
sudo sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 5/' /etc/php/8.2/fpm/pool.d/www.conf
sudo sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 20/' /etc/php/8.2/fpm/pool.d/www.conf
# 4. Включение OPcache с рекомендуемыми параметрами
echo -e '\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.revalidate_freq=2' | sudo tee -a /etc/php/8.2/fpm/php.ini
# 5. Перезапуск и проверка
sudo systemctl restart php8.2-fpm
sudo systemctl status php8.2-fpm
# 6. Создание тестового файла PHP
cat <<'EOF' | sudo tee /var/www/html/info.php
<?
phpinfo();
?>
EOF
# 7. Установка Nginx (если ещё не установлен)
sudo apt install -y nginx
sudo systemctl enable nginx && sudo systemctl start nginx
# 8. Настройка виртуального хоста для передачи запросов на FPM
cat <<'EOF' | sudo tee /etc/nginx/sites-available/default
server {
listen 80 default_server;
root /var/www/html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
sudo systemctl reload nginx
# 9. Проверка через curl
docker run --rm curlimages/curl curl -s http://localhost/info.php | head -20
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8phpinfo() ...
Пояснение: В результате браузер отобразит страницу phpinfo, где видны версия PHP, загруженные модули, параметры OPcache и FPM.
2. Установка PHP 8.0 параллельно с PHP 7.4 на CentOS 7 через Remi репозиторий
На CentOS удобно использовать репозиторий Remi, который предоставляет несколько версий PHP в одном источнике.
# Установка EPEL и Remi репозиториев
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# Установка yum-utils для управления модулями
sudo yum install -y yum-utils
# Активация модуля PHP 7.4
sudo yum-config-manager --enable remi-php74
sudo yum install -y php php-cli php-fpm php-mysql php-xml php-mbstring php-curl php-gd php-zip
# Активация модуля PHP 8.0 (отключает 7.4)
sudo yum-config-manager --disable remi-php74
sudo yum-config-manager --enable remi-php80
sudo yum install -y php80-php php80-php-cli php80-php-fpm php80-php-mysqlnd php80-php-xml php80-php-mbstring php80-php-curl php80-php-gd php80-php-zip
# Теперь обе версии установлены. Переключение через альтернативы
sudo alternatives --config php
# Выбрать номер, соответствующий версии 7.4 или 8.0
There are 2 programs which provide 'php'. Selection Command ----------------------------------------------- *+ 1 /usr/bin/php 2 /usr/bin/php80 Enter to keep the current selection[+], or type selection number: 2
Пояснение: Команда alternatives позволяет выбрать, какая версия PHP будет использоваться по умолчанию. Обе версии могут работать одновременно через разные сокеты FPM.
3. Сборка PHP 8.3 с индивидуальным профилем опций для встраивания
Пример предназначен для случая, когда PHP должен работать как встраиваемый интерпретатор внутри другого приложения (например, SAPI embed).
# Загрузка исходного кода
git clone https://github.com/php/php-src.git --branch PHP-8.3.0 --depth 1
cd php-src
# Конфигурация с включением embed SAPI и отключением некоторых модулей для уменьшения размера
./buildconf --force
./configure --prefix=/opt/php-embed \
--enable-embed=static \
--disable-cgi \
--disable-fpm \
--disable-cli \
--without-pdo-sqlite \
--without-sqlite3 \
--with-config-file-path=/opt/php-embed/etc \
--with-openssl \
--enable-mbstring=all
make -j$(nproc)
sudo make install
После сборки в директории /opt/php-embed/lib появится статическая библиотека libphp.a, которую можно линковать с C/C++ проектом.
# Пример компиляции C программы, использующей встроенный PHP
gcc -o myapp myapp.c -I/opt/php-embed/include -L/opt/php-embed/lib -lphp -lxml2 -lssl -lcrypto -lm -ldl
4. Настройка PHP через environment variables в Docker Compose
Удобный способ конфигурирования PHP без изменения файлов - передача переменных окружения в контейнер.
# docker-compose.yml
version: '3'
services:
php:
image: php:8.2-fpm
volumes:
- ./src:/var/www/html
environment:
PHP_MEMORY_LIMIT: 512M
PHP_UPLOAD_MAX_FILESIZE: 100M
PHP_POST_MAX_SIZE: 110M
PHP_MAX_EXECUTION_TIME: 300
PHP_OPCACHE_ENABLE: '1'
PHP_OPCACHE_MEMORY_CONSUMPTION: '256'
Эти переменные автоматически обрабатываются скриптом docker-php-ext-configure и записываются в php.ini.
# После запуска контейнера проверить параметры можно через exec docker exec -it container_name php -i | grep memory_limit memory_limit = 512M
5. Автоматизация установки PHP на Windows через Chocolatey
Для Windows разработчиков удобен менеджер пакетов Chocolatey, позволяющий установить PHP одной командой и управлять расширениями.
# Установка Chocolatey (от имени администратора)
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Установка PHP 8.2 с популярными расширениями
choco install php --version=8.2.0 --params 'InstallDir=C:\tools\php82;Extensions=openssl,mbstring,curl,gd,pdo_mysql,mysqli'
# После установки добавить путь в PATH (обычно делает инсталлятор)
refreshenv
php -v
PHP 8.2.0 (cli) (built: Nov 30 2022 12:00:00) ( ZTS Visual C++ 2019 ) Copyright (c) The PHP Group Zend Engine v4.2.0, Copyright (c) Zend Technologies