如何从PHP cli获得Linux控制台$ COLUMNS和$ ROWS?

我目前正在为PHP创build一个新的整齐的CLI库,我想弄清楚它正在运行的控制台的宽度/高度。

我已经尝试了很多东西,比如挖掘$ _ENV,exec(“echo $ COLUMNS”)等,但没有结果,而如果在bash命令行中inputecho $ COLUMNS或$ ROWS,它会整齐地显示值。

我需要做什么才能从PHP访问这个值?

我正在使用这样的.sh脚本:

#!/usr/bin/php -q <?php require_once('lib.commandline.php'); class HelloWorld extends CommandLineApp { public function main($args) { echo('O, Hai.'); } } 

更新最终解决scheme

 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]; } } 

Solutions Collecting From Web of "如何从PHP cli获得Linux控制台$ COLUMNS和$ ROWS?"

另一个不需要解析的shell选项是tput

 $this->settings['screen']['width'] = exec('tput cols') $this->settings['screen']['height'] = exec('tput lines') 

使用PHP的ncurses_getmaxyx函数。

 ncurses_getmaxyx (STDSCR, $Height, $Width) 

先前:

http://php.net/manual/en/function.getenv.php

 $cols = getenv('COLUMNS'); $rows = getenv('ROWS'); 

“正确”的方法可能是调用TIOCGSIZE ioctl来获取内核的窗口大小的想法,或者调用命令stty -a并解析rowscolumns的结果

$COLUMNS$LINES可能不会被导出到您的程序。 您可以在运行应用程序之前运行export LINES COLUMNS ,也可以直接获取此信息:

 $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); 

也许这个链接可能是答案,你可以使用ANSI Escape代码来做到这一点,通过使用特定的Escape代码序列的echo ,特别是“查询设备”,我发现另一个链接在这里详细解释。 也许使用这可能使你得到屏幕的列和行…

环境变量可以在$ _ENV超级全局变量中找到。

 echo $_ENV['ROWS']; 

例如。