Инструменты для локальной разработки на PHP
Зачем нужен локальный сервер для PHP
Разработка на PHP требует окружения, в котором можно выполнять скрипты и тестировать проекты до публикации. Локальный сервер позволяет запускать код на своём компьютере без обращения к удаленному хостингу. В этой части рассмотрены основные подходы с примерами и возможными сложностями.
Как запустить локальный сервер одной командой?
Встроенный в PHP сервер (начиная с версии 5.4) - самый простой и быстрый способ. Он не требует установки Apache или Nginx.
cd /путь/к/проекту
php -S localhost:8000Php 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:
- phpnginx.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=80805. PhpStorm: привязка встроенного сервера к проекту
В PhpStorm можно создать конфигурацию запуска: Run -> Edit Configurations -> + -> PHP Built-in Web Server. Указать Document root, port (например, 8000) и роутер (если нужно). После нажатия Run сервер будет запущен внутри IDE, а внизу появится вкладка с логами. Это удобно для отладки.