Модуль 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
поддерживает
несколько управляющих последовательностей:
Управляющая последовательность | Описание |
---|---|
\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 завершается ошибкой.