Menu

Как запустить PHP-файл: командная строка и сервер php -S

Запустите PHP-файл из терминала командой php index.php или откройте папку в браузере через встроенный сервер PHP: php -S localhost:8000. Ни Apache, ни XAMPP для этого не нужны.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Чтобы запустить PHP-файл, откройте терминал в его папке и введите php index.php. PHP выполнит файл и напечатает результат в терминале. Чтобы увидеть PHP-страницу в браузере, запустите встроенный сервер командой php -S localhost:8000 и откройте http://localhost:8000.

php index.php

Первый index.php может состоять из одной строки. Нажмите Run: именно это печатает php index.php.

PHP-код пишется после тега <?php. Всё, что стоит до этого тега, выводится как обычный текст, и так PHP смешивает код с HTML.

Запуск PHP-файла из командной строки

PHP CLI (интерфейс командной строки) выполняет скрипт один раз и завершается. Нужен установленный PHP; если php -v выдаёт ошибку, сначала посмотрите установку PHP.

cd ~/projects/hello
php index.php          # run the file
php -l index.php       # only check the syntax ("lint")
php index.php > out.txt   # save the output to a file

php -l полезен перед загрузкой файла на сервер: он сообщает об ошибке разбора с номером строки или пишет No syntax errors detected in index.php.

Передача аргументов через $argv

Слова после имени файла попадают в $argv. $argv[0] всегда имя самого скрипта, а $argc количество элементов, включая это имя. Здесь блок запускается без дополнительных аргументов, поэтому в массиве только имя:

На своём компьютере php index.php Ada 3 напечатает приветствие три раза. Запасные значения через ?? сохраняют работоспособность скрипта, когда аргумент не передан. Для именованных опций вроде --name=Ada используйте getopt:

<?php
// php index.php --name=Ada --verbose
$opts = getopt('', ['name:', 'verbose']);
echo "Hello, " . ($opts['name'] ?? 'world') . "\n";
if (isset($opts['verbose'])) {
    echo "Verbose mode\n";
}

Запуск PHP в браузере через php -S

В PHP встроен веб-сервер для разработки. Запустите его в папке с файлами:

php -S localhost:8000
[Sat Oct  3 07:21:34 2026] PHP 8.3.19 Development Server (http://localhost:8000) started

Теперь http://localhost:8000/ выполняет index.php, а http://localhost:8000/about.php выполняет about.php. Каждая загрузка страницы запускает файл заново, а строка запроса попадает в $_GET. Блок ниже ведёт себя так же: запустите его, нажмите на ссылку, и скрипт выполнится снова с заданным $_GET['page'].

Полезные опции:

php -S localhost:8000 -t public        # serve the public/ folder as the web root
php -S 0.0.0.0:8000                    # reachable from other devices on your network
php -S localhost:8000 router.php       # send every request through router.php

Встроенный сервер обрабатывает по одному запросу за раз и предназначен только для разработки. В продакшене PHP работает за Nginx или Apache, обычно через PHP-FPM.

Как проверить, каким способом запущен скрипт

PHP_SAPI сообщает, какой "серверный API" выполняет скрипт: cli в терминале, cli-server под php -S, а fpm-fcgi или apache2handler за настоящим веб-сервером. Скрипты, которые должны запускаться только из терминала, проверяют это в первую очередь:

Одна строка через php -r

Для быстрой проверки файл не нужен. php -r выполняет переданный код без тега <?php:

php -r 'echo date("Y-m-d"), PHP_EOL;'
php -r 'var_dump(0.1 + 0.2 == 0.3);'

В cmd Windows оберните код в двойные кавычки, а внутри используйте одинарные. Для нескольких строк php -a открывает интерактивную оболочку, где каждая инструкция выполняется по нажатию Enter.

Исполняемый скрипт в macOS и Linux

Добавьте строку shebang перед <?php и сделайте файл исполняемым. Строка shebang не выводится:

#!/usr/bin/env php
<?php
echo "Backup started\n";
chmod +x backup.php
./backup.php

Так PHP-скрипты запускаются из cron: 0 3 * * * /usr/bin/php /home/me/backup.php.

Коды завершения скриптов

Скрипт командной строки сообщает об успехе или неудаче через код завершения, который могут проверить shell-скрипты и cron. exit(0) означает успех, любое другое число означает ошибку:

<?php
$file = $argv[1] ?? '';
if (!is_file($file)) {
    fwrite(STDERR, "File not found: $file\n");
    exit(1);
}
echo "Processing $file\n";
exit(0);

Частая ошибка: не тот файл или не та папка

Could not open input file: index.php означает, что PHP не находит файл там, где сейчас находится терминал. Проверьте текущую папку командой pwd (или cd в Windows) и либо перейдите в проект через cd, либо укажите полный путь: php ~/projects/hello/index.php. С php -S ошибка 404 для страницы, которая точно существует, обычно значит, что сервер запущен в другой папке; остановите его через Ctrl+C и запустите снова в нужном месте или передайте папку через -t. Если файл выполняется, но показывает пустую страницу, включите вывод ошибок, чтобы увидеть, что пошло не так.

Часто задаваемые вопросы

Как запустить PHP-файл в браузере?

Запустите встроенный сервер в папке с файлом командой php -S localhost:8000 и откройте http://localhost:8000/yourfile.php. Если открыть файл прямо с диска, ничего не сработает: PHP-код просто некому выполнить.

Как передать аргументы PHP-скрипту?

Напишите их после имени файла: php report.php 2026 sales. Внутри скрипта $argv будет массивом ['report.php', '2026', 'sales'], а $argc равен 3. Первый элемент всегда имя скрипта.

Как выполнить одну строку PHP без файла?

Используйте php -r и не пишите тег <?php: php -r 'echo strtoupper("hi"), PHP_EOL;'. Для нескольких строк php -a открывает интерактивную оболочку.

Как понять, запущен PHP из командной строки или веб-сервером?

Проверьте PHP_SAPI (или php_sapi_name()). В терминале это "cli", под php -S это "cli-server", а за веб-сервером что-то вроде "fpm-fcgi" или "apache2handler".

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ