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