Работа с PHP в режиме командной строки
Возможности PHP CLI: запуск скриптов без веб-сервера
Как выполнить PHP скрипт напрямую из командной строки?
Основной способ запуска PHP без веб-сервера - использование интерпретатора PHP в режиме командной строки (CLI). Для этого достаточно передать исполняемому файлу php путь к скрипту.
php /путь/к/скрипту.phpPhp localhost 8000 (запуск php встроенного сервера на порту 8000)
Если скрипт находится в текущей директории, путь можно указать без абсолютного адреса:
php script.phpPhp без сервера (запуск php без веб-сервера (cli))
Возможная проблема: команда php не найдена. Обычно это означает, что PHP не добавлен в переменную окружения PATH. Решение - указать полный путь к интерпретатору, например /usr/bin/php, или настроить переменную PATH.
Типичная ошибка: файл не найден (No such file or directory). Проверьте правильность пути и права доступа к файлу.
Данный метод используется для запуска автономных скриптов, обработчиков задач, cron-задач, тестирования кода без взаимодействия с HTTP.
Как запустить PHP скрипт с передачей аргументов?
Аргументы командной строки передаются через пробел после имени скрипта. Внутри скрипта они доступны в суперглобальном массиве $argv, количество - $argc.
php script.php arg1 arg2 arg3где создать php (где создать php файл)
Пример вывода (если скрипт выводит $argv):
Array
(
[0] => script.php
[1] => arg1
[2] => arg2
[3] => arg3
)где лог php (где находится лог php)
Возможная проблема: аргументы, содержащие пробелы, разбиваются на несколько. Решение - заключать такие аргументы в кавычки: php script.php "one argument".
Как выполнить произвольный код PHP без файла?
С помощью опции -r можно выполнить строку кода непосредственно из командной строки. Это удобно для быстрых тестов.
php -r "echo 'Hello, World!';"Php s localhost (запуск php сервера с localhost)
Hello, World!
где php код (где находится php код)
Проблема: если строка содержит кавычки, экранирование может быть сложным. На Linux/Unix можно использовать одинарные кавычки снаружи: php -r 'echo "Hello";'. В Windows - двойные кавычки с экранированием внутренних.
Как войти в интерактивную оболочку PHP?
Команда php -a запускает интерактивный режим (read-eval-print loop). После ввода кода он немедленно выполняется.
php -a
Interactive mode enabled
php > echo date('Y-m-d');
2025-03-31
php > exitPhp mysql поддержка (поддержка mysql в php)
Проблема: интерактивный режим может отсутствовать в некоторых сборках (особенно Windows). Альтернатива - использовать php -a с установленным модулем readline.
Как запустить встроенный веб-сервер для разработки?
PHP имеет собственный встроенный сервер, который запускается командой php -S. Он не предназначен для продакшена, но идеален для локальной разработки.
php -S localhost:8000
Сервер будет обслуживать файлы из текущей директории. Доступ к приложению - по адресу http://localhost:8000.
Можно указать конкретный файл-роутер (например, router.php):
php -S localhost:8000 router.php
Типичная ошибка: порт уже занят. Решение - использовать другой порт или остановить процесс, занимающий порт.
Как выполнить PHP скрипт через Shebang (Linux/Unix)?
Если добавить в начало скрипта строку #!/usr/bin/php и установить права на выполнение (chmod +x script.php), скрипт можно запускать как обычный исполняемый файл.
#!/usr/bin/php
<?php
echo 'Hello from shebang!';
$ ./script.php Hello from shebang!
Проблема: если путь к PHP другой, строка shebang должна быть скорректирована. Используйте #!/usr/bin/env php для большей переносимости.
Как передать данные в скрипт через стандартный ввод?
Скрипт может читать данные из stdin, что позволяет использовать конвейеры (pipes) и перенаправление ввода.
echo "строка" | php reader.php
php reader.php < input.txt
Внутри скрипта данные читаются из php://stdin или через fgets(STDIN).
Расширенные примеры работы с PHP CLI
Пример 1: Скрипт с обработкой аргументов и выводом справки
#!/usr/bin/env php
<?php
if ($argc < 2) {
fwrite(STDERR, "Использование: {$argv[0]} <имя> [--greeting=...]\n");
exit(1);
}
$name = $argv[1];
$greeting = 'Привет';
for ($i = 2; $i < $argc; $i++) {
if (str_starts_with($argv[$i], '--greeting=')) {
$greeting = substr($argv[$i], 11);
}
}
echo "$greeting, $name!\n";
$ php greet.php Мир --greeting=Здравствуй Здравствуй, Мир!
Пример 2: Чтение данных из stdin и обработка CSV
<?php
$file = fopen('php://stdin', 'r');
if (!$file) {
fwrite(STDERR, "Не удалось открыть stdin\n");
exit(1);
}
$header = fgetcsv($file);
echo "Заголовки: " . implode(', ', $header) . "\n";
$sum = 0;
$count = 0;
while (($row = fgetcsv($file)) !== false) {
$sum += (float)$row[1];
$count++;
}
echo "Среднее значение второго столбца: " . ($count ? $sum / $count : 0) . "\n";
fclose($file);
$ echo -e "name,value\nA,10\nB,20\nC,30" | php csv_avg.php Заголовки: name, value Среднее значение второго столбца: 20
Пример 3: Встроенный сервер с собственным роутером
<?php
// router.php
$uri = $_SERVER['REQUEST_URI'];
if ($uri === '/') {
echo "<h1>Домашняя страница</h1>";
} elseif (preg_match('#^/user/(\d+)$#', $uri, $m)) {
echo "<h1>Пользователь ID: " . htmlspecialchars($m[1]) . "</h1>";
} else {
// Возвращаем false, чтобы сервер обслужил статический файл
return false;
}
Запуск: php -S localhost:8080 router.php
Пример 4: Выполнение PHP кода из строки с аргументами
php -r 'print_r($argv);' -- arg1 arg2 arg3
Array
(
[0] => -
[1] => arg1
[2] => arg2
[3] => arg3
)
Обратите внимание: при использовании -r первый аргумент (имя скрипта) заменяется на дефис.
Пример 5: Использование php.ini для CLI с отдельными настройками
php -c /путь/к/особому/php.ini script.php
Можно также переопределить отдельные директивы через -d:
php -d memory_limit=512M -d display_errors=1 script.php
Пример 6: Запуск демона с бесконечным циклом
<?php
declare(ticks = 1);
function signalHandler($signo) {
echo "Получен сигнал $signo, завершаем...\n";
exit;
}
pcntl_signal(SIGINT, 'signalHandler');
pcntl_signal(SIGTERM, 'signalHandler');
while (true) {
echo "Работаю... " . date('H:i:s') . "\n";
sleep(5);
}
Запуск: php daemon.php. Прерывание по Ctrl+C.
Пример 7: Использование php://input для чтения POST-данных (через встроенный сервер)
<?php
// save_post.php
$raw = file_get_contents('php://input');
file_put_contents('log.txt', $raw . PHP_EOL, FILE_APPEND);
echo 'Saved: ' . strlen($raw) . ' байт';
Тестирование через curl: curl -X POST -d "key=value" http://localhost:8000/save_post.php