Я хочу читать по одному символу из командной строки в PHP, однако кажется, что откуда-то есть какая-то буферизация ввода, предотвращающая это .
Рассмотрим этот код:
#!/usr/bin/php
<?php
echo "input# ";
while ($c = fread(STDIN, 1)) {
echo "Read from STDIN: " . $c . "\ninput# ";
}
?>
Набрав "foo" в качестве ввода (и нажав Enter), я получаю следующий результат:
input# foo
Read from STDIN: f
input# Read from STDIN: o
input# Read from STDIN: o
input# Read from STDIN:
input#
Результат, который я ожидаю , будет:
input# f
input# Read from STDIN: f
input# o
input# Read from STDIN: o
input# o
input# Read from STDIN: o
input#
input# Read from STDIN:
input#
(То есть символы читаются и обрабатываются по мере их ввода).
Однако в настоящее время каждый символ читается только после нажатия клавиши Enter. У меня есть подозрение, что TTY буферизует ввод.
В конечном итоге я хочу иметь возможность читать нажатия клавиш, такие как стрелка вверх, стрелка вниз и т. Д.