Работа с PHP сервером на порту 8000 в локальной среде

Раздел: Администрирование -> Настройка окружения

Запуск встроенного веб-сервера PHP

Основной способ запуска встроенного сервера PHP на порту 8000 - выполнить команду:

php -S localhost:8000

Php localhost 8000 (запуск php встроенного сервера на порту 8000)

Эта команда запускает сервер, который обслуживает запросы из текущей директории. Если в папке есть файл index.php или index.html, он будет отображаться по умолчанию. Для проверки создайте файл index.php:

<?php
echo "Сервер PHP работает на порту 8000. Текущее время: " . date('H:i:s');
?>

Php s localhost (запуск php сервера с localhost)

Затем откройте в браузере http://localhost:8000.

Цель использования

Этот вариант подходит для быстрой проверки кода, тестирования небольших проектов или локальной разработки без установки полноценного веб-сервера (Apache/Nginx).

Типичные ошибки и их решения

  • Ошибка 'Address already in use': Убедитесь, что порт 8000 не занят другим процессом. Используйте netstat -ano | findstr :8000 (Windows) или lsof -i :8000 (Linux/Mac). При необходимости завершите процесс или выберите другой порт, например php -S localhost:8001.
  • Сервер не запускается в фоновом режиме: В некоторых терминалах после запуска сервер блокирует консоль. Для работы в фоне используйте php -S localhost:8000 & (Linux/Mac) или запустите в отдельном окне.
  • Файлы не отображаются: Проверьте, что файл находится в текущей директории или указан правильный корневой путь через -t.

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

Если проект находится не в текущей папке, используйте флаг -t:

php -S localhost:8000 -t /полный/путь/к/проекту/public

где php код (где находится php код)

Цель

Полезно для проектов с точкой входа в подпапке (например, public/ в Laravel).

Ошибка: если путь содержит пробелы, его необходимо заключать в кавычки ("путь с пробелами").


Как добавить маршрутизацию через PHP роутер?

Для обработки всех запросов через один скрипт (например, для REST API или MVC) передайте файл-роутер:

php -S localhost:8000 router.php

где лог php (где находится лог php)

Пример router.php:

<?php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/' || $uri === '/index.php') {
    require 'index.php';
    return;
}
if (file_exists(__DIR__ . $uri)) {
    return false; // отдать статический файл
}
http_response_code(404);
echo "Страница не найдена: $uri";
?>

где создать php (где создать php файл)

Цель

Необходимо для создания единой точки входа, обработки ошибок и переадресации.

Важно: если роутер возвращает false, сервер пытается отдать статический файл. Используйте это для CSS/JS.


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

Укажите IP-адрес 0.0.0.0 вместо localhost:

php -S 0.0.0.0:8000

Php mysql поддержка (поддержка mysql в php)

Сервер будет принимать запросы с любого сетевого интерфейса. Для доступа с другого устройства в локальной сети используйте ваш локальный IP (например, 192.168.1.100).

Цель

Тестирование на реальных устройствах (мобильные, планшеты) или в виртуальной машине.

Брандмауэр может блокировать порт 8000. Разрешите входящие соединения на этом порту в настройках системы.


Как применить свои настройки PHP (php.ini)?

Используйте опцию -c:

php -c /путь/к/php.ini -S localhost:8000

Php без сервера (запуск php без веб-сервера (cli))

Если нужно временно изменить настройки (например, увеличить лимит памяти), создайте отдельный ini-файл:

php -c myconfig.ini -S localhost:8000

Пример myconfig.ini:

memory_limit = 256M
max_execution_time = 300

Цель

Необходимо для тестирования кода с определёнными параметрами PHP, не затрагивая глобальную конфигурацию.

Некоторые директивы (например, display_errors) можно изменить прямо в скрипте через ini_set().


Как запустить сервер в фоновом режиме на Windows?

В Windows нет нативного фонового режима через &. Используйте start /B:

start /B php -S localhost:8000

Или через PowerShell:

Start-Process -NoNewWindow php -ArgumentList "-S", "localhost:8000"

Цель

Чтобы не занимать окно терминала при долгой разработке.

Фоновый процесс останется висеть после закрытия окна. Убить его можно через диспетчер задач или taskkill /F /IM php.exe.

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


Пример 1. Роутер для простого MVC с контроллерами и 404

Создайте файл router.php:

Пример
<?php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

// Маршруты
$routes = [
    '/' => 'home',
    '/about' => 'about',
    '/contact' => 'contact',
];

if (isset($routes[$uri])) {
    $controller = $routes[$uri];
    // Имитация вызова контроллера
    echo "<h1>Страница: $controller</h1>";
} elseif (file_exists(__DIR__ . $uri)) {
    return false;
} else {
    http_response_code(404);
    echo "<h1>404 - Страница не найдена</h1>";
}
?>

Запустите сервер:

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

Откройте http://localhost:8000 - увидите заголовок "Страница: home".
Откройте http://localhost:8000/about - "Страница: about".
Откройте http://localhost:8000/unknown - код 404.

Результат в браузере:
http://localhost:8000/ -> "

Страница: home

" http://localhost:8000/about -> "

Страница: about

" http://localhost:8000/unknown -> код 404, "

404 - Страница не найдена

"

Пример 2. Запуск сервера с разными портами в одной сессии

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

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

На Linux/Mac используйте команды по очереди с &. На Windows - откройте три разных окна PowerShell или используйте start /B.

Каждый сервер будет обслуживать свой проект. Проверьте:
http://localhost:8000, http://localhost:8001, http://localhost:8002

Пример 3. Использование встроенного сервера для тестирования API с POST-запросами

Создайте api.php:

Пример
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $json = file_get_contents('php://input');
    $data = json_decode($json, true);
    $response = ['status' => 'ok', 'received' => $data];
    header('Content-Type: application/json');
    echo json_encode($response);
} else {
    http_response_code(405);
    echo json_encode(['error' => 'Метод не поддерживается']);
}
?>

Запустите сервер с роутером (или просто обратитесь к api.php):

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

Отправьте POST-запрос через curl:

Пример
curl -X POST http://localhost:8000/api.php -H "Content-Type: application/json" -d '{"user":"test"}'
Результат от сервера:
{"status":"ok","received":{"user":"test"}}

Пример 4. Передача переменных окружения для настройки сервера

Запуск с определённой переменной окружения:

Пример
APP_ENV=development php -S localhost:8000

В файле index.php:

Пример
<?php
$env = getenv('APP_ENV') ?: 'production';
echo "Режим окружения: $env";
?>

Результат: Режим окружения: development.

На Windows можно задать через set APP_ENV=development && php -S localhost:8000.


Пример 5. Обработка статических файлов с fallback на роутер

Создайте файл router.php, возвращающий false, если файл существует, иначе - index.php:

Пример
<?php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$filePath = __DIR__ . $uri;
if ($uri !== '/' && file_exists($filePath) && !is_dir($filePath)) {
    return false; // сервер отдаст статику сам
}
require 'index.php';
?>

В index.php:

Пример
<?php
$route = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
echo "Маршрут: $route";
?>

Теперь любые несуществующие пути будут обработаны через index.php, а существующие файлы (CSS, JS, картинки) будут отданы напрямую.

http://localhost:8000/style.css (если файл существует) - отдаст CSS.
http://localhost:8000/test - отобразит "Маршрут: /test".

Пример 6. Запуск с отображением всех ошибок и детальным логированием

Чтобы видеть все ошибки в консоли сервера, запустите с флагом -d:

Пример
php -d display_errors=1 -d error_reporting=E_ALL -S localhost:8000

Также можно перенаправить логи в файл:

Пример
php -S localhost:8000 > server.log 2>&1 &

Просмотреть логи:

Пример
tail -f server.log
В консоли будут выводиться все запросы и ошибки в реальном времени.

Запуск PHP встроенного сервера на порту 8000 - comments

En
Php localhost 8000 (php)