首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从PHP cli获取linux控制台$COLUMNS和$ROWS?

如何从PHP cli获取linux控制台$COLUMNS和$ROWS?
EN

Stack Overflow用户
提问于 2010-02-05 05:39:09
回答 7查看 12.9K关注 0票数 26

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

我尝试了很多方法,比如挖掘$_ENV、exec("echo $COLUMNS")等,但都没有结果,而如果我在bash命令行中输入echo $COLUMNS或$ROWS,它会整齐地显示值。

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

我使用的.sh脚本如下:

代码语言:javascript
复制
#!/usr/bin/php -q
<?php

require_once('lib.commandline.php');


class HelloWorld extends CommandLineApp {

  public function main($args) {

       echo('O, Hai.');

    }

}

更新最终解决方案:

代码语言:javascript
复制
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];
      }
    }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-05 08:12:18

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

代码语言:javascript
复制
$this->settings['screen']['width'] = exec('tput cols')
$this->settings['screen']['height'] = exec('tput lines')
票数 52
EN

Stack Overflow用户

发布于 2010-02-05 05:45:44

使用PHP ncurses_getmaxyx函数。

代码语言:javascript
复制
ncurses_getmaxyx (STDSCR, $Height, $Width)

以前的

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

代码语言:javascript
复制
$cols = getenv('COLUMNS');
$rows = getenv('ROWS');

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

票数 6
EN

Stack Overflow用户

发布于 2010-02-05 05:59:13

$COLUMNS$LINES可能没有导出到您的程序中。您可以在运行应用程序之前运行export LINES COLUMNS,也可以直接获取以下信息:

代码语言:javascript
复制
$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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2203437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档