Как установить PHP на веб-сервер: полное руководство
Установка PHP: обзор основных методов
Как установить PHP из официального репозитория для быстрой настройки сервера?
Наиболее эффективным решением для большинства серверов на базе Debian/Ubuntu является установка через пакетный менеджер apt. Этот способ обеспечивает интеграцию с системой, автоматическое обновление и поддержку зависимостей.
sudo apt update
sudo apt install php libapache2-mod-php php-mysql php-cli php-xml php-mbstring php-curl php-zip
Пояснение шагов:
sudo apt update- обновление списка доступных пакетов.- Установка PHP вместе с модулями:
libapache2-mod-phpдля Apache,php-mysqlдля MySQL/MariaDB,php-cliдля командной строки,php-xml,php-mbstring,php-curl,php-zipдля распространённых функций.
Типичная ошибка:
После установки Apache не обрабатывает PHP-файлы (выводится исходный код). Решение - активировать модуль PHP и перезапустить Apache:
sudo a2enmod php8.3
sudo systemctl restart apache2
Какие альтернативные способы установки существуют для разных сценариев?
Вариант 1: Установка PHP из исходников
Подходит, если требуется специфическая версия PHP или нестандартная конфигурация без лишних модулей. Пример для PHP 8.3:
wget https://www.php.net/distributions/php-8.3.0.tar.gz
tar xzf php-8.3.0.tar.gz
cd php-8.3.0
./configure --prefix=/usr/local/php --with-apxs2=/usr/bin/apxs --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mbstring --enable-xml --enable-zip --with-curl
make -j$(nproc)
sudo make install
Пояснение:
--prefixуказывает каталог установки.--with-apxs2подключает PHP к Apache через модуль.- Флаги
--enable-*и--with-*активируют расширения.
Возможная проблема:
Отсутствие библиотек, таких как libxml2-dev, libcurl4-openssl-dev. Решение - установить зависимости перед configure:
sudo apt install build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libsqlite3-dev libonig-dev
Вариант 2: Использование Docker
Для изолированного тестирования или контейнерной разработки. Пример запуска PHP с Apache в контейнере:
docker run -d -p 8080:80 --name my-php-apache php:8.3-apache
После запуска PHP доступен по адресу http://localhost:8080. Чтобы добавить свой код, нужно смонтировать каталог:
docker run -d -p 8080:80 -v /path/to/your/code:/var/www/html php:8.3-apache
Типичная ошибка:
Контейнер не запускается из-за занятого порта. Решение - сменить внешний порт (например, 8081) или остановить другой процесс.
Вариант 3: Установка на Windows для разработки
Для локальной среды разработки можно использовать интегрированные пакеты (XAMPP, WAMP) или установить PHP вручную. Пример ручной установки:
- Скачать ZIP-архив с php.net (например, php-8.3.0-nts-Win32-vs16-x64.zip)
- Распаковать в C:\php
- Добавить C:\php в переменную среды PATH
- Переименовать php.ini-development в php.ini и настроить (например, раскомментировать extension_dir)
Цель:
Полный контроль над конфигурацией без лишних компонентов. Рекомендуется для опытных разработчиков.
Проблема:
PHP не распознаётся в командной строке. Решение - проверить добавление пути в PATH и перезапустить терминал.
Вариант 4: Установка на macOS через Homebrew
Наиболее простой способ для macOS:
brew install php
После установки можно подключить PHP к Apache через модуль или использовать встроенный сервер php -S localhost:8000.
Ошибка:
Конфликт с системным PHP (macOS Monterey и старше). Решение - использовать brew link --overwrite php.
Расширенные примеры и команды для установки PHP
Пример 1: Установка нескольких версий PHP через PPA (Ubuntu)
Позволяет переключаться между версиями для тестирования совместимости кода.
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.1 php8.1-cli php8.1-mysql php8.2 php8.2-cli php8.2-mysql
# После установки можно переключать версию по умолчанию: sudo update-alternatives --config php
Пример 2: Сборка PHP с дополнительными расширениями из исходников
Добавление поддержки PostgreSQL и Redis.
./configure --prefix=/usr/local/php8.3 --with-apxs2=/usr/bin/apxs --with-pdo-pgsql=/usr --with-pdo-mysql=mysqlnd --enable-redis --with-curl --enable-zip --enable-mbstring --with-openssl
make -j$(nproc)
sudo make install
# После установки проверить расширения:
/usr/local/php8.3/bin/php -m | grep -E 'redis|pdo_pgsql'
redis pdo_pgsql
Пример 3: Docker Compose для PHP + Nginx + MariaDB
Создание файла docker-compose.yml:
version: '3.8'
services:
php:
image: php:8.3-fpm
volumes:
- ./app:/var/www/html
networks:
- app-net
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./app:/var/www/html
networks:
- app-net
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: test
networks:
- app-net
networks:
app-net:
Пример 4: Компиляция PHP с поддержкой ZTS (Zend Thread Safety) для многопоточных приложений
./configure --prefix=/usr/local/php-zts --enable-maintainer-zts --with-apxs2=/usr/bin/apxs --with-mysqli=mysqlnd --enable-pcntl --enable-sockets
make
sudo make install
# Проверить, что ZTS включён:
/usr/local/php-zts/bin/php -i | grep 'Thread Safety'
Thread Safety = enabled
Пример 5: Установка PHP через brew с разными опциями (macOS)
brew install php@8.2
# Если нужны дополнительные формулы:
brew install php-imagick php-redis
# Проверка версии:
php -v
PHP 8.2.12 (cli) (built: Nov 13 2023 12:00:00) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.2.12, Copyright (c) Zend Technologies
Пример 6: Настройка PHP-FPM для высокой нагрузки
Изменение пула по умолчанию:
sudo nano /etc/php/8.3/fpm/pool.d/www.conf
# Изменить параметры:
; pm.max_children = 50
; pm.start_servers = 5
; pm.min_spare_servers = 5
; pm.max_spare_servers = 35
; pm.max_requests = 500
sudo systemctl restart php8.3-fpm
Возможная ошибка при запуске:
Сокет не найден. Проверить путь к сокету в конфиге и права доступа.
listen = /run/php/php8.3-fpm.sock
sudo chmod 777 /run/php/