Локальное выполнение 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.