Запуск приложений PHP на локальном сервере

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

Основные способы запуска PHP сайта на localhost

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

Как запустить PHP сайт с помощью встроенного сервера?

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

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

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

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

После запуска сайт доступен по адресу http://localhost:8000. Данный сервер поддерживает PHP скрипты, но не обрабатывает файлы .htaccess и не предназначен для production.

Типичная проблема: сервер запускается, но вместо PHP выводится текст файла. Это происходит, если не указан параметр -t или файл не имеет расширения .php. Решение: указывается полный путь к папке с index.php.

Как использовать XAMPP для запуска PHP сайта?

XAMPP предоставляет готовый набор Apache, PHP, MySQL и phpMyAdmin. После установки файлы размещаются в папке htdocs.

Пример: файл index.php помещается в C:\xampp\htdocs\myproject. Сайт открывается в браузере по адресу http://localhost/myproject.

Ошибка: порт 80 занят другим приложением (IIS, Skype). Решение: в файле httpd.conf изменяется строка Listen 80 на, например, Listen 8080. Apache перезапускается.

Как запустить PHP сайт в контейнере Docker?

Docker позволяет изолировать окружение. Создается Dockerfile с образом php:apache и файлами сайта.

# Dockerfile
FROM php:8.2-apache
COPY . /var/www/html/
EXPOSE 80

Www localhost php (доступ к php через www.localhost)

Сборка и запуск выполняются:

docker build -t myphpapp .
docker run -d -p 8080:80 myphpapp

Сайт открывается на http://localhost:8080.

Проблема: изменения файлов не видны без пересборки образа. Решение: используется монтирование тома (volume) в docker run -v /путь/к/сайту:/var/www/html.

Как запустить PHP сайт с помощью OpenServer?

OpenServer (Windows) предоставляет управляемый интерфейс для выбора версий PHP, Apache, Nginx. Программа запускается, проект помещается в папку domains, создается домен через меню «Домены».

Например, папка project1 -> создается домен project1.loc. Сайт доступен по http://project1.loc.

Ошибка: домен не открывается. Проверяется, добавлен ли он в hosts файл. OpenServer делает это автоматически, но может потребоваться перезагрузка.

Расширенные примеры настройки локального PHP сервера

1. Запуск с пользовательским маршрутизатором

Встроенный сервер поддерживает файл маршрутизации. Создается файл router.php:

Пример
<?php
// router.php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/' || file_exists(__DIR__ . $uri)) {
    return false; // отдать статический файл или index.php
} else {
    http_response_code(404);
    echo '404 Not Found';
}

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

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

Результат: при запросе существующего файла он отдается, иначе возвращается 404.

curl http://localhost:8000/test.txt (если test.txt существует) -> содержимое файла
curl http://localhost:8000/unknown -> 404 Not Found

2. Запуск с самоподписанным SSL сертификатом через обратный прокси

Встроенный сервер не поддерживает HTTPS. Используется nginx или Apache как прокси. Для Docker добавляется сертификат.

Пример с Docker и Apache с SSL:

Пример
# Dockerfile
FROM php:8.2-apache
RUN a2enmod ssl && mkdir /etc/apache2/ssl
COPY server.crt /etc/apache2/ssl/
COPY server.key /etc/apache2/ssl/
COPY 000-default.conf /etc/apache2/sites-available/
# конфигурация виртуального хоста с SSL

Сертификат создается командой:

Пример
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout server.key -out server.crt \
  -subj "/CN=localhost"

3. Использование переменных окружения с библиотекой phpdotenv

Установка библиотеки выполняется через composer:

Пример
composer require vlucas/phpdotenv

Файл .env:

Пример
DB_HOST=localhost
DB_NAME=mydb

Код index.php:

Пример
<?php
require __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
echo 'DB_HOST: ' . $_ENV['DB_HOST'];

Результат:

DB_HOST: localhost

4. Настройка PHP-FPM и Nginx в Docker

Настройка осуществляется через docker-compose.yml:

Пример
version: '3.8'
services:
  web:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/html
    ports:
      - '8080:80'
    depends_on:
      - php
  php:
    image: php:8.2-fpm
    volumes:
      - ./src:/var/www/html

nginx.conf:

Пример
server {
    listen 80;
    root /var/www/html;
    index index.php;
    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Запуск: docker-compose up -d. Сайт доступен на http://localhost:8080.

5. Запуск нескольких проектов на разных портах

Можно запустить несколько экземпляров встроенного сервера:

Пример
php -S localhost:8000 -t /project1 &
php -S localhost:8001 -t /project2 &

Каждый проект доступен на своем порту. Рекомендуется использовать скрипт запуска для управления.

Сайт на localhost - comments

En
Localhost php site (php)