我想從PHP的命令行中一次讀取一個字符,但似乎有某種輸入緩衝從某處阻止這種情況發生。PHP CLI:如何從TTY讀取單個字符的輸入(無需等待輸入鍵)?
考慮以下代碼:
#!/usr/bin/php
<?php
echo "input# ";
while ($c = fread(STDIN, 1)) {
echo "Read from STDIN: " . $c . "\ninput# ";
}
?>
鍵入 「富」 作爲輸入(並按下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#
(也就是說,字符是rea d並按打字鍵進行處理)。
但是,目前,每個字符只有在按下輸入後才被讀取。我懷疑TTY緩衝輸入。
最後,我希望能夠讀取按鍵如向上箭頭,向下箭頭等提前
謝謝!
「不要忘了復位TTY,當你用它做!」 - 我們如何重置? – mpen 2011-11-10 17:12:36
馬克:在最基本的時候,你可以做'stty理智'。但是,爲了保證您將tty重置爲之前的確切狀態,您應該首先保存它的狀態。我已經擴大了答案,包括如何做到這一點的例子。 – dansimau 2011-11-24 00:34:26
不錯!謝謝你:) – mpen 2011-11-24 08:09:17