Esto podría ser un poco tarde, pero aquí está la solución que resuelve este problema para mí: En el estilo de C# 's Console
, me escribió una pequeña clase que puede hacer un readLine()
, así como 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);
}
}
el uso
Ejemplo:
Console::open();
echo "Input something: ";
$str = Console::readLine();
if (is_string($str))
Console::writeLine($str);
else
echo "ERROR";
Console::close();
EDIT: Este método sólo funciona obviamente, si t El proceso principal no cambia STDOUT o STDIN.
La pregunta que he estado preguntando durante años es: * ¿por qué * esta función básica y esencial no está disponible en Windows? Si el sistema operativo no ofrece nada equivalente, seguramente podría emularlo. –
Cinco años después, desde PHP v7.1 Readline ya está disponible en Windows – icc97