Originariamente inviato da Fabio Heller
Non è una mancanza, è che CLI lavora a basso livello quindi il buffer lo devi creare e gestire tu
E' quello che vorrei! Leggermi il buffer come e quando voglio io, senza che l'esecuzioni si arresti su fgetc()!
Il tuo esempio modificato per far vedere quello che vorrei fare:
codice:
$len = 4096 ;
$stopChar = 'c'; // per uscire dal ciclo
$buffer = '' ;
$i = 0;
while( false !== ($x = fgetc(STDIN)) )
{
// voglio che sia stamapto $i a intervalli di 1 secondo
// ...vorrei, ma non accade! perchè mi fermo su fgetc()
$i++;
fwrite(STDOUT, $i."\n");
sleep(1);
if( $x == $stopChar )
{
break;
}
else
{
$buffer .= $x;
}
}
fwrite(STDOUT, "quit command received.\n");
sleep(2);
A me serve una
bool getKeyState($keycode);
da poter controllare tranquillamente come:
if(getKeyState(KEY_ESC)) break;
...e al momento non si può fare in PHP CLI, non c'è verso.
Al momento ho "fixato" con quello stratagemma del server/client inserendo una cosa diquesto tipo:
codice:
$ss = new csmallserver();
$ss->bind($this->address_sv, (int)$this->port_sv);
$ss->listen();
while(1)
{
// fai fuffa, controlli, etc
// controllo se è giunto qualcosa al server
// $ss->poll() non si stoppa come fgetc() in attesa di INVIO
// o altro
$remote_command = $ss->poll();
if($remote_command != "")
{
if($remote_command == "quit")
{
$ss->close();
break;
}
}
}
Così va, ma è come mobilitare l'esercito USA contro un albanese che ruba una banana dal fruttivendolo...