Questo potrebbe essere un po 'in ritardo, ma ecco la soluzione che ha risolto questo problema per me: Nello stile di C#' s Console
, ho scritto un po 'di classe che può fare un readLine()
così come un writeLine($str)
:
class Console {
const READLINE_MAX_LENGTH = 0xFFFF;
const WRITELINE_NEWLINE = "\n";
private static /*Resource*/ $stdin;
private static /*Resource*/ $stdout;
public static function /*void*/ close() {
fclose(self::$stdin);
fclose(self::$stdout);
}
public static function /*void*/ open() {
self::$stdin = fopen('php://stdin', 'r');
self::$stdout = fopen('php://stdout', 'w');
}
public static function /*string*/ readLine() {
return stream_get_line(self::$stdin, self::READLINE_MAX_LENGTH, "\r\n");
}
public static function /*void*/ writeLine (/*string*/ $str) {
fwrite(self::$stdout, $str);
fwrite(self::$stdout, self::WRITELINE_NEWLINE);
}
}
utilizzo
Esempio:
Console::open();
echo "Input something: ";
$str = Console::readLine();
if (is_string($str))
Console::writeLine($str);
else
echo "ERROR";
Console::close();
EDIT: Questo metodo funziona ovviamente solo se t il processo genitore non cambia STDOUT o STDIN.
La domanda che chiedo da anni è, * perché * questa funzione di base, essenziale, non è disponibile su Windows? Se il sistema operativo non offre nulla di equivalente, sicuramente potresti emularlo. –
Cinque anni più tardi, da PHP v7.1 readline è ora disponibile su Windows – icc97