Tôi muốn đọc một ký tự một lần từ dòng lệnh trong PHP, tuy nhiên có vẻ như có một số loại đệm đầu vào từ một nơi nào đó ngăn chặn điều này.PHP CLI: Cách đọc một ký tự đầu vào duy nhất từ TTY (mà không phải đợi khóa nhập)?
xem xét mã này:
#!/usr/bin/php
<?php
echo "input# ";
while ($c = fread(STDIN, 1)) {
echo "Read from STDIN: " . $c . "\ninput# ";
}
?>
Typing trong "foo" như đầu vào (và nhấn Enter), sản lượng Tôi nhận được là:
input# foo
Read from STDIN: f
input# Read from STDIN: o
input# Read from STDIN: o
input# Read from STDIN:
input#
Sản lượng Tôi mong là:
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#
(Tức là, với các ký tự đang được kiểm tra lại d và xử lý khi chúng được gõ).
Tuy nhiên, hiện tại, mỗi ký tự chỉ được đọc sau khi nhấn enter. Tôi có một nghi ngờ TTY là đệm đầu vào.
Cuối cùng tôi muốn có thể đọc các phím bấm như mũi tên LÊN, mũi tên XUỐNG, v.v.
Cảm ơn bạn trước!
"Đừng quên đặt lại TTY khi bạn đã làm xong!" - làm thế nào để chúng tôi thiết lập lại nó? – mpen
Đánh dấu: Tại cơ bản nhất bạn có thể làm 'stty sane'. Tuy nhiên, để đảm bảo bạn đang đặt lại tty về trạng thái chính xác, trước đây bạn nên lưu trạng thái của nó trước. Tôi đã mở rộng câu trả lời để bao gồm các ví dụ về cách thực hiện điều đó. – dansimau
đẹp! cảm ơn bạn vì điều này :) – mpen