Работа с PHP в режиме командной строки

Раздел: Конфигурация PHP -> Настройка окружения

Возможности PHP CLI: запуск скриптов без веб-сервера

Как выполнить PHP скрипт напрямую из командной строки?

Основной способ запуска PHP без веб-сервера - использование интерпретатора PHP в режиме командной строки (CLI). Для этого достаточно передать исполняемому файлу php путь к скрипту.

php /путь/к/скрипту.php

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

Если скрипт находится в текущей директории, путь можно указать без абсолютного адреса:

php script.php

Php без сервера (запуск 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 > exit

Php 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

Запуск PHP без веб-сервера (CLI) - comments

En
Php без сервера (php)