Использование PHP через терминал: команды и примеры
Работа с PHP из командной строки открывает широкие возможности для автоматизации, быстрого тестирования и администрирования серверов. Интерпретатор PHP содержит множество опций, которые позволяют выполнять код без создания файлов, управлять конфигурацией, запускать встроенный веб-сервер и многое другое. Ниже рассмотрены основные команды и их применение.
Команды интерпретатора PHP
Как выполнить PHP-код без создания файла с помощью опции -r?
php -r 'echo "Привет, мир!\n";'Php команды консоли (команды php в консоли)
Привет, мир!
Опция -r позволяет выполнить одну строку PHP-кода. Код заключается в кавычки. Использование одинарных кавычек упрощает работу с двойными внутри. Для многострочного кода можно использовать escape-последовательность \n или разделять команды точкой с запятой. Такой подход удобен для быстрой проверки простых выражений.
Типичные ошибки: забытая точка с запятой, неправильное экранирование кавычек. Если внутри строки нужна одинарная кавычка, её необходимо экранировать обратным слешем. При использовании двойных кавычек во внешней оболочке переменные PHP могут интерпретироваться как переменные оболочки. Рекомендуется помещать код в одинарные кавычки.
Цель: быстрое выполнение однострочных операций, проверка функций, вывод значений.
Как работать с PHP в интерактивном режиме для тестирования?
php -a
php > echo 'Hello, interactive mode!\n';
Hello, interactive mode!
php > exit
Интерактивная оболочка запускается командой php -a. Можно вводить код построчно и сразу видеть результат. Выход выполняется командой exit или нажатием Ctrl+D. Режим полезен для отладки коротких кусков кода и изучения поведения функций.
Синтаксические ошибки видны после нажатия Enter, но не всегда понятна причина. Также не поддерживается автодополнение. Для более продвинутой работы можно использовать psySH (composer require psy/psysh).
Случаи использования: тестирование регулярных выражений, проверка массивов, изучение новых расширений.
Как проверить PHP-файл на наличие синтаксических ошибок без его выполнения?
php -l script.php
No syntax errors detected in script.php
Опция -l читает файл и проверяет синтаксис, не выполняя код. Если обнаружены ошибки, выводятся строка и описание. Удобно для предварительной проверки перед развертыванием.
Не проверяются логические ошибки (неверно используемые переменные) и ошибки, возникающие при подключении отсутствующих файлов.
Цель: быстрый контроль качества кода, интеграция в CI/CD пайплайны.
Как запустить локальный веб-сервер для разработки PHP-приложений?
php -S localhost:8000 -t public/
Встроенный сервер запускается на указанном адресе и порту. Параметр -t задает корневую директорию. Если не указать, корень - текущая папка. Сервер поддерживает роутинг при передаче PHP-файла в качестве роутера.
php -S localhost:8000 router.php
Файл router.php получает запрос и может обработать его, вернув другой файл или JSON. Например, на основе $_SERVER['REQUEST_URI'] реализуется REST API.
Ограничения: однопоточный, медленнее Apache/Nginx. Долгие скрипты блокируют обработку следующих запросов. Не рекомендуется для production.
Использование: быстрая разработка, тестирование без установки полноценного сервера.
Как временно изменить настройки PHP для одного запуска?
php -d memory_limit=256M -d error_reporting=E_ALL -d display_errors=1 script.php
Опция -d переопределяет директивы php.ini для текущего вызова. Удобно для отладки, увеличения лимитов, отключения устаревших функций без правки глобального конфига.
Некоторые директивы (например, extension_dir) нельзя изменить на лету. Изменения действуют только на один процесс.
Цель: отладка с расширенным выводом ошибок, тестирование с измененными параметрами.
Как вывести список всех подключенных расширений PHP?
php -m
[PHP Modules] ... [Zend Modules] ...
Опция -m показывает как PHP-модули (PDO, mbstring), так и Zend-модули (Xdebug). Результат можно отфильтровать через grep.
php -m | grep -i json
Выведет только строку 'json' при наличии модуля.
Вывод может быть объемным. Некоторые модули перечислены в php.ini, но могут быть не установлены.
Использование: проверка окружения, документирование конфигурации.
Как получить детальную конфигурацию PHP, включая пути и параметры?
php -i | grep 'error_reporting'
error_reporting => 32767 => 32767
Опция -i выводит полную информацию (эквивалент phpinfo()) в консоль. Можно перенаправить в файл для анализа.
Объем вывода огромен. Требуется grep или фильтрация. Не все параметры отображаются, если используется другой php.ini.
Цель: диагностика расширений, поиск путей, сравнение конфигураций.
Как выполнить PHP-код, переданный по конвейеру?
echo '<? echo "Hello from pipe\n";' | php
Hello from pipe
Метод позволяет генерировать код динамически и передавать его в PHP. Закрывающий тег ?> не обязателен. Полезен в сочетании с awk, sed, curl.
Экранирование символов (например, $) может потребовать обратный слеш в оболочке. Ошибки синтаксиса выводятся сразу.
Использование: генерация кода, конвейерная обработка, интеграция с оболочкой.
Как отлаживать PHP-скрипт по шагам в командной строке?
phpdbg -qrr -e script.php
phpdbg - встроенный отладчик. Опция -qrr запускает выполнение в тихом режиме. Можно устанавливать точки останова, делать шаги, просматривать переменные.
phpdbg -b 10 -e script.php <<< 'run'
Устанавливает точку останова на строке 10 и запускает.
phpdbg требует компиляции с --enable-phpdbg. Интерфейс консольный. Для продвинутой отладки рекомендуется Xdebug.
Цель: поиск сложных ошибок, пошаговый контроль состояния.
Как передать параметры в PHP-скрипт при запуске из консоли?
php script.php --name=John --age 30
Аргументы доступны через $argv (массив) и $argc (количество). Первый элемент - имя скрипта. Для обработки длинных опций используется getopt().
// script.php
var_dump($argv);
Вывод: array(3) { [0]=> 'script.php' [1]=> '--name=John' [2]=> '--age' [3]=> '30' }
При использовании getopt() нужно правильно разделять опции и значения. Аргументы с пробелами должны быть в кавычках.
Использование: написание CLI-утилит, скриптов администрирования, автоматизация.
Как выполнять команды, определенные в composer.json, через консоль?
composer run-script my-command
В composer.json в секции 'scripts' определяются пользовательские команды. Например: "scripts": { "test": "phpunit", "check": "php -l src/" }. Выполнение происходит в контексте проекта.
Скрипты должны быть описаны заранее. Возможны проблемы с переменными окружения. Требуется установленный composer.
Цель: стандартизация команд разработки, упрощение сборки и тестирования.
Расширенные примеры работы с PHP в командной строке
Многострочный код через -r с аргументами
php -r '
$items = array("apple", "banana", "cherry");
foreach ($items as $i => $item) {
echo $i . ": " . $item . "\n";
}
echo "Total: " . count($items) . "\n";
'
0: apple 1: banana 2: cherry Total: 3
Пояснение: Многострочный код в одинарных кавычках. Переменные интерполируются через конкатенацию, чтобы избежать двойных кавычек. Аргументы можно передать после --:
php -r 'var_dump($argv);' -- arg1 arg2 2>&1
array(3) {
[0]=>string(10) "Standard input code"
[1]=>string(4) "arg1"
[2]=>string(4) "arg2"
}
Встроенный сервер с динамическим роутингом
// router.php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($path === '/api/time') {
header('Content-Type: application/json');
echo json_encode(array('time' => date('Y-m-d H:i:s')));
return true;
}
return false;
php -S localhost:8000 router.php
Запрос через curl:
curl http://localhost:8000/api/time
{"time":"2025-04-10 15:30:00"}
Пояснение: Роутер возвращает true, если сам обработал запрос. В противном случае встроенный сервер обслуживает статические файлы.
Пошаговая отладка с phpdbg
// test.php
function calc($a, $b) {
$sum = $a + $b;
$product = $a * $b;
return $sum + $product;
}
$result = calc(3, 5);
echo "Result: $result\n";
Запуск с точкой останова на 4 строке:
phpdbg -b 4 -e test.php <<< 'run' q
Команда 'run' запускает выполнение до точки останова. Далее можно использовать 'ev $sum' для вывода значения переменной. Сокращенный вывод:
Breakpoint in calc at test.php:4 $sum = 8 $product = 15 $result = 28 Result: 28
Пояснение: phpdbg позволяет интерактивно просматривать переменные и выполнять шаги.
Комбинация директив -d для полной отладки
php -d display_errors=1 -d error_reporting=E_ALL -d log_errors=0 -r '
trigger_error("Тестовая ошибка", E_USER_NOTICE);
trigger_error("Предупреждение", E_USER_WARNING);
echo file_get_contents("nonexistent.txt");
'
Notice: Тестовая ошибка in Command line code on line 2 Warning: Предупреждение in Command line code on line 3 Warning: file_get_contents(nonexistent.txt): Failed to open stream: No such file or directory in Command line code on line 4
Пояснение: Директивы display_errors=1 и error_reporting=E_ALL заставляют выводить все ошибки, включая уведомления. log_errors=0 отключает запись в лог.