Локальный PHP сервер: команда php -S и ее возможности

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

Основные способы запуска встроенного PHP сервера

Наиболее эффективное решение для разработки

Встроенный веб-сервер PHP запускается командой php -S localhost:8000. Этот сервер предназначен только для локальной разработки и не подходит для продакшн-окружения. По умолчанию он обслуживает файлы из текущей директории, используя встроенный обработчик для скриптов PHP. Простейший запуск:

php -S localhost:8000

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

После выполнения команды сервер слушает порт 8000. Откройте браузер по адресу http://localhost:8000. Все запросы обрабатываются сервером, PHP-файлы исполняются, остальные отдаются как статика.

Типичная ошибка: Порт занят. Если порт 8000 уже используется, появится сообщение Address already in use. Решение: указать другой порт, например php -S localhost:8080, или завершить процесс, занимающий порт.

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

Используйте опцию -t (document root). Например, для папки public:

php -S localhost:8000 -t public

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

Теперь корень сервера - директория public. Все запросы к http://localhost:8000/ обрабатываются относительно этой папки. Это полезно для проектов с точкой входа (index.php в public).

Как настроить собственный Router (front controller)?

При разработке SPA или фреймворков требуется, чтобы все запросы направлялись на один PHP-файл (например, index.php). Для этого передайте имя PHP-файла как аргумент:

php -S localhost:8000 -t public router.php

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

Файл router.php должен содержать логику маршрутизации, например:


<?php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/' || file_exists(__DIR__ . '/public' . $uri)) {
    return false; // отдать статический файл
}
$_GET['url'] = substr($uri, 1);
require __DIR__ . '/public/index.php';

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

Если скрипт возвращает false, сервер отдаёт статический файл как обычно; иначе выполняется указанный скрипт.

Как разрешить доступ с других устройств в локальной сети?

По умолчанию сервер слушает только localhost (127.0.0.1). Чтобы принимать соединения с любого сетевого интерфейса, укажите 0.0.0.0:

php -S 0.0.0.0:8000

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

Теперь сервер доступен по IP-адресу вашего компьютера в локальной сети. Например, http://192.168.1.100:8000. Это удобно для тестирования на мобильных устройствах или других ПК.

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

Просто откройте несколько терминалов и запустите сервер на разных портах, например:

php -S localhost:8000
php -S localhost:8001

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

Каждый экземпляр работает независимо со своим корневым каталогом (по умолчанию текущий). Для разных проектов можно указывать разные корневые папки через -t.

Как задать дополнительные настройки PHP через php.ini?

Используйте опцию -c для указания пути к ini-файлу:

php -S localhost:8000 -c /path/to/custom.ini

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

В ini-файле можно задать, например, увеличенный лимит памяти или включить отображение ошибок:

memory_limit = 256M
display_errors = On

Если опция -c не указана, сервер использует стандартный загруженный php.ini.

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

Ошибка: 'php' не является внутренней или внешней командой - PHP не добавлен в переменную окружения PATH. Добавьте путь к папке с php.exe в PATH (Windows) или используйте полный путь к бинарнику.

Ошибка: Не удалось загрузить скрипт router.php - убедитесь, что файл существует в указанной директории и имеет правильный синтаксис PHP.

Сервер запущен, но страницы не загружаются - проверьте, не блокирует ли брандмауэр порт. На Windows может потребоваться разрешить соединение для PHP.

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

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

Пример
# Создаём структуру:
mkdir myproject && cd myproject
mkdir public
mkdir public/css
echo '<?php echo "Hello, world!"; ?>' > public/index.php
echo 'body { background: #fff; }' > public/css/style.css
# Запускаем сервер с корнем public/:
php -S localhost:8080 -t public

Результат: сервер обслуживает только файлы внутри public/. Запрос http://localhost:8080/ выполнит public/index.php, а http://localhost:8080/css/style.css отдаст CSS как статику. При обращении к /../config.php сервер вернёт 404, так как выход за пределы document root блокируется.

# Откроем в браузере:
# http://localhost:8080/ -> страница с текстом "Hello, world!"
# http://localhost:8080/css/style.css -> содержимое CSS

Пример 2. Использование router.php для редиректов в одностраничном приложении

Пример
# Создаём router.php:
<?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($path !== '/' && !file_exists(__DIR__ . '/public' . $path)) {
    // Все запросы к несуществующим файлам отправляем на index.php
    $_GET['url'] = ltrim($path, '/');
    require __DIR__ . '/public/index.php';
} else {
    return false; // отдать файл как есть (статику)
}
?>
# Запуск:
php -S localhost:8000 -t public router.php

Результат: при запросе /about (если файла public/about нет) сервер выполняет router.php, который требует index.php. index.php может обрабатывать маршрут через $_GET['url']. Статические файлы (например, /css/app.css) отдаются напрямую.

# http://localhost:8000/about -> выполнит index.php с параметром url=about
# http://localhost:8000/ => index.php (корень) или статика, если есть index.html

Пример 3. Запуск на 0.0.0.0 с несколькими одновременно работающими серверами

Пример
# Терминал 1:
php -S 0.0.0.0:8080 -t /home/user/project1

# Терминал 2:
php -S 0.0.0.0:8081 -t /home/user/project2

Теперь оба сервера видны в локальной сети. Например, если ваш IP 192.168.0.10, то project1 доступен по http://192.168.0.10:8080, project2 - по http://192.168.0.10:8081. Это удобно при работе над несколькими проектами одновременно.

# Проверка (на другом устройстве):
# curl http://192.168.0.10:8080 -> ответ от project1
# curl http://192.168.0.10:8081 -> ответ от project2

Пример 4. Запуск с собственным php.ini и включением вывода ошибок

Пример
# Создаём файл dev.ini:
echo 'display_errors = On
error_reporting = E_ALL
memory_limit = 512M' > dev.ini

# Запускаем сервер с этим ini:
php -S localhost:8000 -c dev.ini

Результат: все ошибки PHP будут выводиться на экран, что полезно при отладке. Лимит памяти увеличен до 512 МБ. Убедитесь, что файл dev.ini находится в той же директории, где выполняется команда, или укажите полный путь.

# В консоли можно увидеть ошибки скриптов, если они есть.

Пример 5. Одновременный запуск с разными портами и разными корнями (кросс-проектная разработка)

Пример
# Проект A (Laravel) на порту 8000:
php -S localhost:8000 -t /var/www/laravel/public

# Проект B (WordPress) на порту 8001:
php -S localhost:8001 -t /var/www/wordpress

Каждый проект использует свой document root и свой порт. При этом оба сервера слушают только localhost, что безопасно для локальной разработки. Для доступа с других машин замените localhost на 0.0.0.0, но помните о повышенных рисках.

# В браузере:
# http://localhost:8000 -> приветствие Laravel
# http://localhost:8001 -> главная WordPress

Запуск PHP сервера с localhost - comments

En
Php s localhost (php)