Инструменты для локальной разработки на PHP

Раздел: Инструменты PHP -> Среда разработки

Зачем нужен локальный сервер для PHP

Разработка на PHP требует окружения, в котором можно выполнять скрипты и тестировать проекты до публикации. Локальный сервер позволяет запускать код на своём компьютере без обращения к удаленному хостингу. В этой части рассмотрены основные подходы с примерами и возможными сложностями.

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

Встроенный в PHP сервер (начиная с версии 5.4) - самый простой и быстрый способ. Он не требует установки Apache или Nginx.

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

Php open server (open server (php))

Listening on http://localhost:8000
Document root is /путь/к/проекту

Local php server (локальный php сервер)

Сервер обрабатывает запросы как встроенный веб-сервер. Если нужен кастомный роутер, добавьте файл router.php:

php -S localhost:8000 router.php

Проблема: порт занят. Ошибка Address already in use. Решение: изменить порт (например, 8080) или завершить другой процесс.

Проблема: сервер не обрабатывает статику. Встроенный сервер по умолчанию отдает статические файлы только если они лежат в корне. Решение: использовать роутер, который проверяет наличие файла через file_exists().

Как создать полноценное окружение с Apache и MySQL?

Комплексные пакеты (XAMPP, WAMP, MAMP) предлагают готовую сборку веб-сервера, базы данных и интерпретатора PHP. Они идеальны для новичков и проектов, которым нужен MySQL.

# Пример запуска XAMPP через терминал (Linux)
sudo /opt/lampp/lampp start

Проблема: конфликт портов (например, порт 80 занят Skype). Решение: изменить порт в файле httpd.conf или завершить программу, использующую порт.

Проблема: разные версии PHP. В XAMPP можно переключать версию через панель управления, но это не всегда стабильно.

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

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

docker run -d -p 8080:80 --name my-php -v "$(pwd):/var/www/html" php:8.2-apache

В этом примере контейнер с Apache слушает порт 8080, а ваш код монтируется в папку с сайтом.

Проблема: медленная работа на Windows (монтирование томов). Решение: использовать WSL2 или настроить volume с кешированием.

Проблема: необходимость установки и изучения Docker. Для простых проектов это может быть избыточно.

Как запустить сервер для фреймворка (Laravel, Symfony)?

Фреймворки часто предлагают собственные команды для запуска. Они удобнее, чем встроенный сервер, потому что учитывают особенности структуры роутинга.

# Laravel
php artisan serve --port=9000

# Symfony
symfony server:start

Эти команды запускают PHP-сервер с необходимым окружением.

Проблема: artisan serve не для продакшна, только для разработки. Также может не поддерживать HTTPS без дополнительной настройки.

Как запустить сервер прямо из редактора кода?

PhpStorm и другие IDE умеют запускать встроенный PHP-сервер во вкладке терминала. Это удобно для быстрого тестирования.

// В PhpStorm: Tools -> Run Command -> php -S localhost:8000

Проблема: сервер останавливается при закрытии IDE. Решение: запускать в фоне или использовать отдельный терминал.

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

1. Встроенный сервер с роутингом и конфигурацией

Пример router.php, который обрабатывает URL и выполняет разный код в зависимости от пути:

Пример
$uri = $_SERVER['REQUEST_URI'];
if ($uri === '/api/info') {
    header('Content-Type: application/json');
    echo json_encode(['status' => 'ok', 'time' => time()]);
} elseif (preg_match('/\.(?:png|jpg|css|js)$/', $uri)) {
    // Статические файлы
    return false; // пусть сервер отдает сам
} else {
    include 'index.php';
}
При запросе http://localhost:8000/api/info получим JSON-ответ.

Запуск с указанием IP для доступа из локальной сети (например, 0.0.0.0):

Пример
php -S 0.0.0.0:8000

Теперь сервер доступен по IP вашего компьютера в той же сети.

Автоматическая перезагрузка при изменении файлов (с помощью inotifywait на Linux):

Пример
while inotifywait -r -e modify .; do
    kill $(lsof -ti:8000) 2>/dev/null
    php -S localhost:8000 &
done

Для Windows можно использовать PowerShell скрипт с таймером.

2. XAMPP: настройка виртуальных хостов

Создание отдельного домена для проекта:

Пример
# httpd-vhosts.conf (в папке XAMPP/apache/conf/extra)

    ServerName myproject.local
    DocumentRoot "C:/xampp/htdocs/myproject/public"
    
        AllowOverride All
        Require all granted
    

Добавить строку 127.0.0.1 myproject.local в файл hosts (C:\Windows\System32\drivers\etc\hosts). После перезапуска Apache сайт станет доступен по http://myproject.local.

3. Docker Compose с PHP-FPM и Nginx

Создать docker-compose.yml:

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

nginx.conf:

Пример
server {
    listen 80;
    root /var/www/html;
    index index.php index.html;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    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 -d

Приложение доступно на http://localhost. В файле app/index.php можно поместить <? phpinfo(); ?> для проверки.

4. Laravel с пользовательским роутером и HTTPS

Laravel использует свой artisan serve. Чтобы включить HTTPS (самоподписанный сертификат):

Пример
# Сначала создать сертификат (требуется OpenSSL)
php artisan serve --port=443 --tls

Также можно настроить дополнительные опции через файл config/app.php или явно указать IP:

Пример
php artisan serve --host=0.0.0.0 --port=8080

5. PhpStorm: привязка встроенного сервера к проекту

В PhpStorm можно создать конфигурацию запуска: Run -> Edit Configurations -> + -> PHP Built-in Web Server. Указать Document root, port (например, 8000) и роутер (если нужно). После нажатия Run сервер будет запущен внутри IDE, а внизу появится вкладка с логами. Это удобно для отладки.

Локальный PHP сервер - comments

En
Local php server (php)