我有一個用PHP構建的簡單的命令行工具,它工作的很好。不幸的是,我們現在有一些不太聰明的用戶在處理數據時敲擊鍵盤。如何在PHP控制檯應用程序中刷新STDIN?
有沒有辦法刷新STDIN,所以它只能開始緩衝從我使用fgetc時的數據?
我試過打開我自己的STDIN管道,甚至通過循環通過那裏有哪些作品,但不處理多個CRs沖洗緩衝區。
倒帶和fseek似乎沒有用PHP中的STDIN做任何事情。
似乎這將是一個普遍的問題,但沒有太多。
PHP版本5.3.3
(我不希望使用ncurses的,如果我沒有)
任何與fgets或龜etc會表現出我的問題。例如,如果您有提示表明某些內容處於「正在處理」狀態,然後開始輸入,則輸入緩衝在STDIN中,因此當您實際提示用戶稍後輸入某些內容時,它們將添加到緩衝區中。因此,如果他們在「處理」時鍵入「abc」,然後提示輸入的內容是「abc」,以及在fgets或fgetc時提示輸入的內容。所以如果有人一直敲擊ENTER並且你正在使用fgets(或者fgetc爲「\ n」跳躍),那麼你會得到過早的代碼延續。
例如:
echo "Processing";
sleep(10); // HIT ENTER A FEW TIMES HERE
echo "Input Something: ";
// REALLY NEED TO FLUSH STDIN HERE SOMEHOW
fgets(STDIN);
我沒有得到問題。你能展示一個簡單的代碼示例以及它應該做什麼? – hek2mgl 2014-09-02 13:07:43
PHP根本就沒有線程,我很好奇誰會認爲在Python上編寫CLI util util是一個好主意,或者Java ......用線程技術你可能不會遇到這個問題,米不能確定問題是什麼.. – 2014-09-02 13:08:21
@ RaggaMuffin-420這與線程有關嗎? – hek2mgl 2014-09-02 13:21:11