Запуск приложений 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 80Www 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 &
Каждый проект доступен на своем порту. Рекомендуется использовать скрипт запуска для управления.