è comunque di leggere da STDIN
con PHP che è non bloccante:lì non-blocking su STDIN in PHP CLI
ho provato questo:
stream_set_blocking(STDIN, false);
echo fread(STDIN, 1);
e questo:
$stdin = fopen('php://stdin', 'r');
stream_set_blocking($stdin, false);
echo 'Press enter to force run command...' . PHP_EOL;
echo fread($stdin, 1);
ma blocca ancora fino al fread
ottiene alcuni dati.
Ho notato alcune segnalazioni di bug aperte su questo (7 anni), quindi se non può essere fatto, qualcuno conosce qualche hack rozzo che potrebbe realizzare questo (su Windows e Linux)?
- https://bugs.php.net/bug.php?id=34972
- https://bugs.php.net/bug.php?id=47893
- https://bugs.php.net/bug.php?id=48684
Non sono sicuro di capire quale dovrebbe essere il comportamento non bloccante. Se non c'è niente in attesa di essere inviato a stdin, dovrebbe 'fread()' restituire un FALSE? Come lo distinguerebbe da EOF? Mi sembra che tu abbia bisogno di una sorta di test * altro * di 'fread()' per determinare se ci sono dati in attesa su stdin, poiché non c'è un errore descrittivo. – Graham
@Graham 'fread' non ritorna, sospendo l'esecuzione dello script, fino a quando non viene dato input a' STDIN'. Fondamentalmente quello che voglio, è controllare se c'è qualche input da parte dell'utente a 'STDIN', e se no, continuare, o eseguire altre cose. – Petah
@Graham "Non bloccare" significa che 'fread()' dovrebbe tornare immediatamente, anche se non può leggere la quantità di dati, che dovrebbe leggere (il secondo argomento), ma meno di questo. In questo caso dovrebbe restituire una stringa vuota. @Petah hai provato 'fopen ('php: // stdin)'? Ricordo vagamente che ho avuto problemi con 'STDIN' prima. – KingCrunch