В PHP я могу читать входные данные из программы командной строки с помощью следующего кода
$stream = STDIN;
$test = fgets($stream);
echo $test;
Это хорошо работает для простого ввода. Однако, если я попытаюсь использовать что-то вроде клавиши со стрелкой назад, моя оболочка будет выглядеть следующим образом
This is a test^[[D^[[D^[[D
то есть escape-последовательность клавиш со стрелками ^[[D
отправляется в оболочку. PHP сам будет интерпретировать клавиши со стрелками — т.е.
This is a test^[[D^[[D^[[D^[[Dsecond test
выведет это
This is a second test
Однако я бы хотел, чтобы оболочка «правильно» (то есть делала то, что, как я думаю, они должны делать, а не буквально то, что я послал), интерпретировала клавиши со стрелками, чтобы точка ввода перемещалась во время ввода.
Это возможно в PHP? С расширением? Без расширения? Я пробовал варианты fgets($stream, 1)
но кажется, что PHP просто зависает, пока пользователь не введет клавишу ввода.
Нет пути с чистым PHP: http://php.net/fgetc (см. комментарии)
Других решений пока нет …