$COLUMNS
y $LINES
probablemente no se esté exportando a su programa. Puedes ejecutar export LINES COLUMNS
antes de ejecutar su aplicación, o puede obtener esta información directamente:
$fp=popen("resize", "r");
$b=stream_get_contents($fp);
preg_match("/COLUMNS=([0-9]+)/", $b, $matches);$columns = $matches[1];
preg_match("/LINES=([0-9]+)/", $b, $matches);$rows = $matches[1];
pclose($fp);
Otra opción de shell que no requiere análisis es tput
:
$this->settings['screen']['width'] = exec('tput cols')
$this->settings['screen']['height'] = exec('tput lines')
No sé, por qué uno debería necesitar grep
para analizar stty
salida:tiene una opción separada para informar "el número de filas y columnas según el kernel".
De una sola línea, sin manejo de errores:
list($rows, $cols) = explode(' ', exec('stty size'));
En una sola línea, asuma que ambas filas/columnas son 0 en caso de problemas y elimine cualquier salida de error:
list($rows, $cols) = explode(' ', @exec('stty size 2>/dev/null') ?: '0 0');
Usa PHP ncurses_getmaxyx
función.
ncurses_getmaxyx (STDSCR, $Height, $Width)
ANTERIORMENTE:
http://php.net/manual/en/function.getenv.php
$cols = getenv('COLUMNS');
$rows = getenv('ROWS');
La forma "correcta" es probablemente llamar al TIOCGSIZE
ioctl para obtener la idea del kernel del tamaño de la ventana, o llame al comando stty -a
y analice los resultados para rows
y columns