Ich möchte ein einzelnes Zeichen von der Kommandozeile in PHP lesen, aber es scheint, als ob irgendwo eine Art von Pufferung stattfindet, um dies zu verhindern.PHP CLI: Wie liest man ein einzelnes Zeichen der Eingabe vom TTY (ohne auf die Eingabetaste zu warten)?
Betrachten Sie diesen Code:
#!/usr/bin/php
<?php
echo "input# ";
while ($c = fread(STDIN, 1)) {
echo "Read from STDIN: " . $c . "\ninput# ";
}
?>
Typing in "foo" als Eingangs (und die Eingabetaste drücken), die Ausgabe erhalte ich ist:
input# foo
Read from STDIN: f
input# Read from STDIN: o
input# Read from STDIN: o
input# Read from STDIN:
input#
Der Ausgang I erwarte ich ist:
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#
(Das heißt, mit Zeichen wird rea d und verarbeitet, wie sie eingegeben werden).
Derzeit wird jedoch jedes Zeichen nur gelesen, nachdem Enter gedrückt wurde. Ich habe den Verdacht, dass das TTY die Eingabe puffert.
Letztlich mag ich in der Lage sein, Drücken von Tasten wie Pfeil nach oben zu lesen, Pfeil nach unten usw.
Vielen Dank im Voraus!
„Vergessen Sie nicht die TTY zurückzusetzen, wenn Sie mit ihm fertig sind!“ - Wie setzen wir es zurück? – mpen
Mark: Am einfachsten können Sie 'stty vernünftig' machen. Um jedoch zu garantieren, dass Sie das tty auf den exakten Zustand zurücksetzen, sollten Sie vorher den Zustand speichern. Ich habe die Antwort um Beispiele erweitert, wie man das macht. – dansimau
schön! Danke dafür :) – mpen