$COLUMNS
et $LINES
n'est probablement pas exporté vers votre programme. Vous pouvez exécuter export LINES COLUMNS
avant d'exécuter votre application, ou vous pouvez obtenir ces informations directement :
$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);
Une autre option shell qui ne nécessite aucune analyse est tput
:
$this->settings['screen']['width'] = exec('tput cols')
$this->settings['screen']['height'] = exec('tput lines')
Je ne sais pas, pourquoi on devrait avoir besoin de grep
pour analyser stty
sortie :il a une option distincte pour indiquer "le nombre de lignes et de colonnes en fonction du noyau".
Une seule ligne, pas de gestion des erreurs :
list($rows, $cols) = explode(' ', exec('stty size'));
Une seule ligne, supposez que les deux lignes/colonnes sont 0 en cas de problème et supprimez toute sortie d'erreur :
list($rows, $cols) = explode(' ', @exec('stty size 2>/dev/null') ?: '0 0');
Utilisez le PHP ncurses_getmaxyx
fonction.
ncurses_getmaxyx (STDSCR, $Height, $Width)
PRÉCÉDEMMENT :
http://php.net/manual/en/function.getenv.php
$cols = getenv('COLUMNS');
$rows = getenv('ROWS');
La "bonne" façon est probablement d'appeler le TIOCGSIZE
ioctl pour avoir une idée du noyau sur la taille de la fenêtre, ou appelez la commande stty -a
et analyser les résultats pour rows
et columns