How to get linux console $COLUMNS and $ROWS from PHP cli?
$COLUMNS
and $LINES
is probably not being exported to your program. You can run export LINES COLUMNS
before running your app, or you can get this information directly:
$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);
Another shell option that requires no parsing is tput
:
$this->settings['screen']['width'] = exec('tput cols')
$this->settings['screen']['height'] = exec('tput lines')
I dunno, why one should ever need grep
to parse stty
output: it does have a separate option to report "the number of rows and columns according to the kernel".
One-liner, no error handling:
list($rows, $cols) = explode(' ', exec('stty size'));
One-liner, assume both rows/cols to be 0 in case of problems and suppress any error output:
list($rows, $cols) = explode(' ', @exec('stty size 2>/dev/null') ?: '0 0');
Use the PHP ncurses_getmaxyx
function.
ncurses_getmaxyx (STDSCR, $Height, $Width)
PREVIOUSLY:
http://php.net/manual/en/function.getenv.php
$cols = getenv('COLUMNS');
$rows = getenv('ROWS');
The "proper" way is probably to call the TIOCGSIZE
ioctl to get the kernel's idea of the window size, or call the command stty -a
and parse the results for rows
and columns