Как установить PHP на веб-сервер: полное руководство

Раздел: Администрирование 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/

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

En
Install php (php)