В настоящее время я создаю новую опрятную библиотеку CLI для PHP, и я хотел бы узнать ширину / высоту консоли, в которой он работает.
Я пробовал много вещей, таких как копание через $ _ENV, exec («echo $ COLUMNS») и т. Д., Но результата нет, а если я набираю echo $ COLUMNS или $ ROWS в командной строке bash, он аккуратно отображает это значение.
Что мне нужно сделать, чтобы получить доступ к этому значению с 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]; } }
Другой вариант оболочки, который не требует синтаксического анализа, – 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
и проанализировать результаты для rows
и columns
$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 для этого, используя echo
используя определенную последовательность кода Escape, в частности «Query Device», в которой я нашел здесь еще одну ссылку, которая подробно объясняет. Возможно, использование этого может позволить вам получить столбцы и строки экрана …
Переменные окружения можно найти в супер глобальной переменной $ _ENV.
echo $_ENV['ROWS'];
например.