代码之家  ›  专栏  ›  技术社区  ›  SchizoDuckie

如何从php cli获取linux控制台$columns和$rows?

  •  19
  • SchizoDuckie  · 技术社区  · 15 年前

    我目前正在为PHP创建一个新的整洁的cli库,我想知道它运行的控制台的宽度/高度。

    我尝试过很多方法,比如挖掘$env、exec(“echo$columns”)等,但是没有结果,而如果我在bash命令行中键入echo$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.');
    
        }
    
    }
    

    更新 最终解决方案:

    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];
          }
        }
    
    5 回复  |  直到 7 年前
        1
  •  45
  •   Dennis Williamson    15 年前

    另一个不需要解析的shell选项是 tput 以下内容:

    $this->settings['screen']['width'] = exec('tput cols')
    $this->settings['screen']['height'] = exec('tput lines')
    
        2
  •  5
  •   Joe Koberg    15 年前

    使用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 并分析结果 rows columns

        3
  •  3
  •   geocar    15 年前

    $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);
    
        4
  •  1
  •   t0mm13b    7 年前

    也许这个 link 可能是答案,您可以使用ansi转义码来实现这一点,方法是使用 echo 使用特定的转义码序列,特别是“查询设备”,我找到了另一个链接 here 这解释得很详细。也许使用它可以使您获得屏幕的列和行…

        5
  •  -2
  •   johannes    15 年前

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

    echo $_ENV['ROWS'];
    

    例如。

    推荐文章