I'm currently creating a new neat CLI library for PHP, and i'd like to figure out the width/height of the console it's running in.
I've tried many things like digging through $_ENV, exec("echo $COLUMNS"), etc, but no result, while if i type echo $COLUMNS or $ROWS in bash commandline, it neatly displays the value.
What do i need to do to access this value from PHP?
I'm using .sh scripts like this:
#!/usr/bin/php -q
<?php
require_once('lib.commandline.php');
class HelloWorld extends CommandLineApp {
public function main($args) {
echo('O, Hai.');
}
}
Update Final solution:
public function getScreenSize() {
preg_match_all("/rows.([0-9]+);.columns.([0-9]+);/", strtolower(exec('stty -a |grep columns')), $output);
if(sizeof($output) == 3) {
$this->settings['screen']['width'] = $output[1][0];
$this->settings['screen']['height'] = $output[2][0];
}
}
Another shell option that requires no parsing is
tput
:Maybe this link might be the answer, you could use the ANSI Escape codes to do that, by using the
echo
using the specific Escape code sequence, in particular the 'Query Device', which I found another link here that explains in detail. Perhaps using that might enable you to get the columns and rows of the screen...$COLUMNS
and$LINES
is probably not being exported to your program. You can runexport LINES COLUMNS
before running your app, or you can get this information directly:Environment variables can be found in the $_ENV super global variable.
for instance.
Use the PHP
ncurses_getmaxyx
function.PREVIOUSLY:
http://php.net/manual/en/function.getenv.php
The "proper" way is probably to call the
TIOCGSIZE
ioctl to get the kernel's idea of the window size, or call the commandstty -a
and parse the results forrows
andcolumns