Как получить консольный $COLUMNS Linux и $ROWS от PHP cli?

Я в настоящее время создаю новую аккуратную библиотеку CLI для PHP, и я хотел бы выяснить ширину/высоту консоли, в которой это работает.

Я попробовал много вещей как рытье через $ _ENV, должностное лицо ("$COLUMNS эха"), и т.д., но никакой результат, в то время как, если я ввожу $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];
      }
    }
21
задан Georg Fritzsche 8 April 2010 в 17:42
поделиться

5 ответов

Другой вариант оболочки, который не требует синтаксического анализа, - это tput :

$this->settings['screen']['width'] = exec('tput cols')
$this->settings['screen']['height'] = exec('tput lines')
46
ответ дан 29 November 2019 в 06:54
поделиться

Используйте функцию PHP ncurses_getmaxyx .

ncurses_getmaxyx (STDSCR, $Height, $Width)

ПРЕДЫДУЩИЙ:

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

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

«Правильный» способ - это, вероятно, вызвать ioctl TIOCGSIZE ioctl, чтобы получить ядро представление о размере окна или вызовите команду stty -a и проанализируйте результаты для строк и столбцов

5
ответ дан 29 November 2019 в 06:54
поделиться

Возможно, это ссылка может быть ответом, вы можете использовать коды ANSI Побега для этого, используя echo , используя определенную последовательность кода Побега, в частности «Устройство запроса», которое я нашел другую ссылку здесь , которая подробно объясняет. Возможно, использование этого позволит вам получить столбцы и строки экрана...

-121--1645554-

Необходимо создать их массив: с name = inputname [] и получить с помощью post, request или get

$inputs = $_POST['inputname'];

print_r($inputs);
-121--1254182-

Переменные среды можно найти в суперглобальной переменной $ _ ENV. Например,

echo $_ENV['ROWS'];

.

-2
ответ дан 29 November 2019 в 06:54
поделиться

Возможно, эта ссылка может быть ответом, вы можете использовать для этого коды выхода ANSI, используя эхо , используя определенную последовательность кодов выхода, в частности 'Запрос Device », которую я нашел еще по одной ссылке здесь , которая подробно объясняет. Возможно, это поможет вам получить столбцы и строки экрана ...

1
ответ дан 29 November 2019 в 06:54
поделиться

$ 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);
3
ответ дан 29 November 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: