Создание локального сервера PHP для проектов

Раздел: -> Настройка PHP

Основные способы настройки локального сервера PHP

Встроенный сервер PHP (самый простой способ)

Начиная с версии 5.4, PHP поставляется со встроенным сервером. Он идеально подходит для быстрого запуска одного проекта без установки дополнительного ПО. Для работы достаточно иметь установленный PHP и терминал.

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

php -S localhost:8000

После выполнения команды сервер запустится на порту 8000, а корнем сайта станет текущая папка. Для указания другой директории используется:

php -S localhost:8000 -t /путь/к/папке

Как определить маршрутизатор (router) для всех запросов?

php -S localhost:8000 index.php

Если в папке есть index.php, сервер будет перенаправлять все не найденные файлы на него.

Проблема: Сервер не видит файлы, не загружается страница.

Решение: Проверьте, что PHP добавлен в переменную PATH. В Windows выполните where php, в Linux/macOS - which php. Убедитесь, что порт не занят: netstat -ano | grep 8000.

Проблема: Ошибка "Address already in use".

Решение: Укажите другой порт, например 8080: php -S localhost:8080.

Вариант 1: XAMPP (полный пакет Apache + MySQL + PHP)

XAMPP - это кроссплатформенный дистрибутив, включающий веб-сервер Apache, PHP, MariaDB и Perl. Подходит для разработки сложных проектов с базами данных.

Как установить и запустить XAMPP на Windows?

  1. Скачайте XAMPP и запустите установщик.
  2. Выберите компоненты (по умолчанию: Apache, PHP, phpMyAdmin).
  3. После установки откройте панель управления XAMPP и нажмите "Start" для Apache.

По умолчанию корневая папка проектов - C:\xampp\htdocs. Положите туда файлы и откройте в браузере http://localhost/имяфайла.php.

Проблема: Порт 80 занят (например, Skype или IIS).

Решение: В панели XAMPP нажмите "Config" → "Apache (httpd.conf)", найдите строку Listen 80 и измените на Listen 8080. Затем перезапустите Apache. Доступ к серверу будет по http://localhost:8080.

Как добавить виртуальные хосты в XAMPP?


# Откройте файл C:\xampp\apache\conf\extra\httpd-vhosts.conf
# Добавьте:
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/mysite"
    ServerName mysite.local
</VirtualHost>
  

Также добавьте в файл hosts (Windows: C:\Windows\System32\drivers\etc\hosts) строку: 127.0.0.1 mysite.local.

Вариант 2: Docker (контейнер с PHP и Apache)

Docker позволяет изолировать окружение и повторять конфигурацию на любых системах. Подходит для командной разработки и деплоя.

Как создать локальный сервер PHP через Docker?


# Создайте Dockerfile:
FROM php:8.2-apache
COPY . /var/www/html/
EXPOSE 80
  

# Запустите:
docker build -t my-php-site .
docker run -d -p 8080:80 my-php-site
  

Теперь сайт доступен на http://localhost:8080.

Проблема: Пустая страница, ошибка 500.

Решение: Проверьте права на файлы: в Docker контейнере Apache часто работает под www-data. Временно измените права: chmod -R 755 /var/www/html.

Как подключить MariaDB?


# docker-compose.yml:
version: '3'
services:
  web:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./site:/var/www/html
  db:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: root
  

Вариант 3: Ручная установка PHP + Apache (Linux)

Для тех, кто предпочитает полный контроль над конфигурацией. Цель - настроить собственный сервер без готовых сборок.

Как установить Apache и PHP на Ubuntu?


sudo apt update
sudo apt install apache2 php libapache2-mod-php
sudo systemctl restart apache2
  

Поместите файлы в /var/www/html/ и откройте http://localhost.

Проблема: Браузер скачивает PHP файл вместо исполнения.

Решение: Убедитесь, что модуль libapache2-mod-php установлен и включен: sudo a2enmod php8.2 (версия может отличаться).

Как настроить виртуальные хосты вручную?


# Создайте файл /etc/apache2/sites-available/mysite.conf:
<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot /var/www/mysite
    ServerName mysite.local
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  

# Активируйте и перезагрузите:
sudo a2ensite mysite.conf
sudo systemctl reload apache2
  

Вариант 4: Встроенный сервер с PHP-FPM и Nginx (продвинутый)

Для высоконагруженных проектов или при необходимости нестандартной конфигурации. PHP-FPM обеспечивает быструю обработку запросов.

Как установить PHP-FPM и Nginx на Ubuntu?


sudo apt install nginx php-fpm
sudo systemctl start nginx php8.2-fpm
  

Настройте серверный блок в /etc/nginx/sites-available/default:


server {
    listen 80;
    root /var/www/html;
    index index.php index.html;
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}
  

Проблема: Ошибка 502 Bad Gateway.

Решение: Проверьте, что PHP-FPM запущен: sudo systemctl status php8.2-fpm. Если сокет не совпадает, укажите правильный путь в fastcgi_pass.

Расширенные примеры настройки и конфигурации

Пример 1. Запуск нескольких сайтов на встроенном сервере с помощью маршрутизации

Можно создать один скрипт-роутер, который будет направлять запросы к разным папкам в зависимости от домена.

Пример

// router.php
$uri = $_SERVER['REQUEST_URI'];
$host = $_SERVER['HTTP_HOST'];

// Виртуальные хосты
$sites = [
    'site1.local' => '/path/to/site1',
    'site2.local' => '/path/to/site2',
];

if (isset($sites[$host])) {
    $docRoot = $sites[$host];
    $file = $docRoot . $uri;
    if (file_exists($file)) {
        return false; // отдать статику напрямую
    }
    // Иначе передать в index.php проекта
    $_SERVER['DOCUMENT_ROOT'] = $docRoot;
    require $docRoot . '/index.php';
} else {
    http_response_code(404);
    echo 'Сайт не найден';
}
Результат: при обращении к http://site1.local:8000/ сервер будет обслуживать файлы из /path/to/site1.

Пример 2. Включение логирования запросов во встроенном сервере

Команда запуска с записью логов в файл:

Пример

php -S localhost:8000 -t /var/www/mysite 2>&1 | tee server.log

Или через дополнительный параметр PHP_CLI_SERVER_WORKERS (для многопоточности в PHP 8.0+):

Пример

PHP_CLI_SERVER_WORKERS=4 php -S localhost:8000
Результат: сервер обрабатывает до 4 одновременных запросов.

Пример 3. Настройка php.ini для локального сервера

Создайте файл user.ini в корне проекта, который будет применяться только к этому серверу:

Пример

; user.ini
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 120
display_errors = On
log_errors = On
error_log = /tmp/php-errors.log

Запустите сервер с указанием ini-файла:

Пример

php -S localhost:8000 -c user.ini
Результат: настройки из user.ini переопределяют глобальные.

Пример 4. Использование встроенного сервера с HTTPS (самоподписанный сертификат)

Сгенерируйте сертификат с помощью OpenSSL:

Пример

openssl req -new -x509 -keyout server.key -out server.crt -days 365 -nodes -subj "/C=RU/ST=State/L=City/O=Company/CN=localhost"

Запустите сервер с поддержкой TLS:

Пример

php -S localhost:443 -t /var/www/html server.crt server.key
Результат: сайт доступен по https://localhost/. Браузер покажет предупреждение о небезопасном сертификате.

Пример 5. Имитация задержек и ошибок (для тестирования)

Создайте скрипт, который имитирует медленный ответ или ошибку 500:

Пример

// slow.php
sleep(5); // задержка 5 секунд
http_response_code(500);
echo 'Внутренняя ошибка сервера';

Запустите встроенный сервер с этим скриптом как роутером:

Пример

php -S localhost:8000 slow.php
Результат: любой запрос сначала ждет 5 секунд, затем получает HTTP 500.

Настройка локального сервера PHP - comments

En
Localhost php (php)