Интерактивная консоль

Модуль CLI SAPI поддерживает интерактивную консоль, которую запускает опция -a, если PHP скомпилировали с параметром --with-readline. Начиная с PHP PHP 7.1.0 интерактивная консоль также доступна в ОС Windows, если модуль readline включили.

Интерактивная консоль умеет принимать и выполнять сам PHP-код.

Пример #1 Запуск кода в интерактивной консоли

$ php -a
Interactive shell

php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >

Интерактивная консоль при нажатии клавиши Tab также автодополняет названия функций, констант, классов, переменных, вызовы статических методов и константы классов.

Пример #2 Автодополнение по клавише Tab

Двойное нажатие клавиши Tab покажет список вариантов, если доступно больше одного варианта дополнения:

php > strp[TAB][TAB]
strpbrk   strpos    strptime
php > strp

Когда есть только одно дополнение, одиночное нажатие Tab дополнит оставшийся текст на той же самой строке:

php > strpt[TAB]ime(

Дополнение также работает для имён, которые объявили в течение текущей интерактивной сессии:

php > $fooThisIsAReallyLongVariableName = 42;
php > $foo[TAB]ThisIsAReallyLongVariableName

Интерактивная оболочка хранит историю команд, для доступа к которой нажимают стрелки вверх и вниз. История хранится в файле ~/.php_history. Начиная с PHP 8.4.0 установить путь к файлу с историей команд можно в переменной окружения PHP_HISTFILE.

Модуль CLI SAPI поддерживает две новые настройки в файле php.ini: cli.pager и cli.prompt. Директива cli.pager разрешает использовать внешнюю программу наподобие less для постраничного просмотра, а не прямого вывода данных на экран. Настройка cli.prompt разрешает задавать приглашение php > на ввод команды.

В интерактивной консоли также разрешается устанавливать настройки файла php.ini через специальное сокращение.

Пример #3 Установка настройки файла php.ini в интерактивной консоли

Настройка cli.prompt:

php > #cli.prompt=hello world :>
hello world :>

Обратными кавычками задают PHP-код, который выполнится в приглашении на ввод команды:

php > #cli.prompt=`echo date('H:i:s');` php >
15:49:35 php > echo 'hi';
hi
15:49:43 php > sleep(2);
15:49:45 php >

Установка less для постраничного вывода данных:

php > #cli.pager=less
php > phpinfo();
(output displayed in less)
php >

Настройка cli.prompt поддерживает несколько управляющих последовательностей:

Управляющие последовательности cli.prompt
Управляющая последовательность Описание
\e Используется для добавления цветов в приглашение на ввод команды. Пример: \e[032m\v \e[031m\b \e[34m\> \e[0m
\v Версия PHP.
\b Отображает в какой части PHP мы находимся. Для примера /* показывает, что мы находимся в многострочном комментарии. Внешняя область видимости обозначается как php.
\> Указывает символ приглашения. По умолчанию это символ >, но можно изменить, когда оболочка находится внутри незакрытого блока или строки. Возможные символы: ' " { ( >

Замечание:

Файлы, подключённые с помощью опций auto_prepend_file и auto_append_file обрабатываются в этом режиме с некоторыми ограничениями, например, функции должны быть объявлены до их использования.

Интерактивный режим

До PHP 8.1.0 при недоступности модуля readline вызов файла CLI SAPI с параметром -a запускал интерактивный режим. В этом режиме предполагается, что PHP-скрипт передадут целиком через стандартный входной поток STDIN, затем завершат ввод комбинацией клавиш CTRL +D (в POSIX-системах) или комбинацией CTRL +Z , за которой идёт клавиша ENTER (в ОС Windows), после чего скрипт обработается. По сути это то же самое, что и вызов CLI SAPI без параметра -a. option.

Начиная с PHP 8.1.0 при недоступности модуля readline вызов CLI SAPI с параметром -a завершается ошибкой.