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

Раздел: Администрирование веб-сервера -> Локальный сервер

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

Как быстро проверить выполнение PHP-скриптов без полномасштабного веб-сервера?

Наиболее эффективное решение для быстрого запуска PHP - использование встроенного сервера, доступного в PHP начиная с версии 5.4. Этот подход не требует установки Apache или Nginx и идеально подходит для разработки небольших приложений, тестирования отдельных скриптов или изучения языка.

Для запуска выполните в терминале команду:

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

Xampp htdocs index php (файлы xampp в папке htdocs)

Где -S - запуск сервера, localhost:8000 - адрес и порт, -t - корневая директория. Создайте файл index.php в указанной папке со следующим содержимым:

<?php echo 'Сервер работает!'; phpinfo();

Localhost php site (сайт на localhost)

Откройте браузер и перейдите на http://localhost:8000. Результатом будет вывод строки «Сервер работает!» и таблица с информацией о PHP (phpinfo).

Типичные ошибки и их решения:

  • Ошибка «PHP не является внутренней или внешней командой» - PHP не добавлен в переменную PATH. Добавьте путь к PHP (например, C:\php) в системную переменную PATH или используйте полный путь к исполняемому файлу php.exe.
  • Ошибка «Address already in use» - порт 8000 занят другой программой. Измените порт, например, на 8080: php -S localhost:8080.
  • Ошибка 404 File Not Found - файл не найден в корневой директории или путь указан неверно. Проверьте параметр -t и наличие файла.
  • Скрипт не обрабатывается, выводится исходный код - вероятно, используется PHP неправильной версии или файл имеет расширение, не ассоциированное с PHP (например, .html). Убедитесь, что файл заканчивается на .php.

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

Как настроить Apache (XAMPP) для обработки PHP через localhost?

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

После установки XAMPP запустите панель управления и стартуйте Apache. По умолчанию корневая папка находится в C:\xampp\htdocs (Windows) или /opt/lampp/htdocs (Linux). Поместите в неё файл info.php с кодом <?php phpinfo(); и откройте http://localhost/info.php. Если всё настроено правильно, вы увидите страницу phpinfo.

Возможные проблемы:

  • Ошибка 403 Forbidden - нет прав доступа к папке. Проверьте настройки Directory в httpd.conf или измените права на папку htdocs.
  • Порт 80 занят (например, Skype или IIS) - в панели XAMPP нажмите Config на строке Apache, выберите httpd.conf и измените Listen 80 на другой порт, например 8080. После этого доступ будет http://localhost:8080/info.php.
  • PHP не обрабатывается, файл скачивается - модуль PHP не подключён. Проверьте в httpd.conf наличие строки LoadModule php_module modules/php8apache2_4.dll (или аналогичной).
  • Ошибка 404 для index.php - не задан индексный файл. В httpd.conf найдите DirectoryIndex и добавьте index.php.

Цель и случаи использования: разработка приложений с Apache-специфичными настройками (URL rewrite, .htaccess), работа с базами данных MySQL, проекты требующие модульной конфигурации сервера.

Как организовать доступ к PHP через Nginx и PHP-FPM на локальном сервере?

Nginx - высокопроизводительный веб-сервер, часто используемый в связке с PHP-FPM. Подходит для разработки проектов, которые в продакшене будут работать на Nginx, для ситуаций, где требуется высокая производительность статики, или для знакомства с этой популярной комбинацией.

Установите Nginx и PHP-FPM. После установки настройте server block. Пример базовой конфигурации для файла /etc/nginx/sites-available/default (путь может отличаться):

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Localhost home php (домашняя страница на localhost)

Поместите файл info.php в папку /var/www/html и перейдите на http://localhost/info.php.

Типичные ошибки:

  • Ошибка 502 Bad Gateway - не запущен PHP-FPM. Запустите его командой sudo systemctl start php8.1-fpm (или аналогичной).
  • Ошибка «No input file specified» - неправильно указан путь в root или SCRIPT_FILENAME. Убедитесь, что корневая папка совпадает с реальным путём.
  • Файлы PHP скачиваются вместо выполнения - блок location ~ \.php$ не сработал. Проверьте регулярное выражение и расстановку фигурных скобок.
  • Ошибка 403 - нет прав на чтение файлов. Измените права на папку: sudo chmod 755 /var/www/html.

Цель и случаи использования: подготовка окружения, близкого к продакшену на Nginx, изучение fastcgi-обработки, сценарии с большим количеством статического контента (CSS, JS), микросервисная архитектура.

Как использовать Docker для доступа к PHP через localhost?

Docker позволяет полностью изолировать окружение PHP и веб-сервера в контейнерах, что исключает конфликты с системными пакетами и упрощает воспроизведение окружения. Решение подходит для командной разработки и проектов со сложными зависимостями.

Создайте файл docker-compose.yml:

version: '3'
services:
  web:
    image: php:8.1-apache
    ports:
      - "80:80"
    volumes:
      - ./html:/var/www/html

Поместите файл index.php в папку ./html (создайте её рядом с docker-compose.yml). Выполните команду docker-compose up -d и откройте http://localhost.

Частые проблемы:

  • Порт 80 уже используется - измените внешний порт в docker-compose, например "8080:80".
  • Пустая страница или 403 - права на папку внутри контейнера. Добавьте в образ инструкцию RUN chown -R www-data:www-data /var/www/html или измените Dockerfile.
  • Изменения в файлах не применяются - проверьте маппинг томов. Если используете Docker Desktop, убедитесь, что папка доступна для общего доступа.

Цель и случаи использования: разработка в изолированной среде, быстрое развёртывание сложных связок (PHP + Nginx + MySQL), тестирование на разных версиях PHP, CI/CD конвейеры.

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

Встроенный PHP-сервер с маршрутизатором

Для обработки всех запросов через единую точку входа (как в фреймворках) используется скрипт-маршрутизатор. Создайте файл router.php в корне проекта:

Пример
<?php
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if ($uri !== '/' && file_exists(__DIR__ . $uri)) {
    return false;
}
require __DIR__ . '/index.php';

Запустите сервер с указанием маршрутизатора:

Пример
php -S localhost:8080 router.php

Теперь все запросы, не соответствующие существующим файлам, будут направляться в index.php. Результат: при открытии http://localhost:8080/test отработает код из index.php, а не ошибка 404 (при условии, что файла test не существует).

Виртуальные хосты в Apache (XAMPP)

Для работы нескольких проектов на одном локальном сервере определите виртуальные хосты. Отредактируйте файл C:\xampp\apache\conf\extra\httpd-vhosts.conf:

Пример
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/project1"
    ServerName project1.local
    ErrorLog "logs/project1-error.log"
    CustomLog "logs/project1-access.log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/project2"
    ServerName project2.local
</VirtualHost>

Добавьте строки в файл hosts (Windows: C:\Windows\System32\drivers\etc\hosts, Linux: /etc/hosts):

Пример
127.0.0.1 project1.local
127.0.0.1 project2.local

Перезапустите Apache. Теперь проекты доступны по адресам http://project1.local и http://project2.local. Результат - два независимых сайта на одном сервере.

Nginx с несколькими location блоками

Создайте конфигурацию сервера, которая разделяет обработку статики и PHP. Добавьте в server block:

Пример
location /static/ {
    alias /var/www/html/static/;
    expires 7d;
}

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_read_timeout 300;
}

Поместите файл style.css в папку /var/www/html/static/. Откройте http://localhost/static/style.css - файл отдаётся напрямую с заголовком Cache-Control: max-age=604800. Запросы к http://localhost/any-route перенаправляются на index.php. Результат - эффективное кеширование статики и единая точка входа для PHP.

Docker с Nginx, PHP-FPM и MySQL

Создайте многосервисную среду. Файл docker-compose.yml:

Пример
version: '3'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
  php:
    image: php:8.1-fpm
    volumes:
      - ./html:/var/www/html
    environment:
      - MYSQL_HOST=db
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

Файл nginx.conf (в той же папке):

Пример
server {
    listen 80;
    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Выполните docker-compose up. Откройте http://localhost:8080. Результат - полностью изолированная среда с Nginx, PHP 8.1 и MySQL. Соединение с БД возможно через хост db и пользователя root с паролем secret.

Доступ к PHP через www.localhost - comments

En
Www localhost php (php)