Wie bekomme ich die Linux-Konsole $ COLUMNS und $ ROWS von PHP CLI?
Lesezeit: 5 Minuten
SchizoDuckie
Ich erstelle gerade eine neue ordentliche CLI-Bibliothek für PHP und möchte die Breite/Höhe der Konsole herausfinden, in der sie ausgeführt wird.
Ich habe viele Dinge ausprobiert, wie das Durchsuchen von $_ENV, exec(“echo $COLUMNS”) usw., aber kein Ergebnis, während wenn ich echo $COLUMNS oder $ROWS in die Bash-Befehlszeile eingebe, der Wert ordentlich angezeigt wird.
Was muss ich tun, um von PHP aus auf diesen Wert zuzugreifen?
Ich verwende .sh-Skripte wie folgt:
#!/usr/bin/php -q
<?php
require_once('lib.commandline.php');
class HelloWorld extends CommandLineApp {
public function main($args) {
echo('O, Hai.');
}
}
Aktualisieren
Endgültige Lösung:
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];
}
}
Also ähm… Mir ist klar, dass es fast 10 Jahre her ist, aber hast du immer noch diese CLI-Bibliothek? GitHub? 🙂
– MSpreis
20. September 2019 um 22:40 Uhr
Eine weitere Shell-Option, die keine Analyse erfordert, ist tput:
Der “richtige” Weg ist wohl der Aufruf TIOCGSIZE ioctl, um die Vorstellung des Kernels von der Fenstergröße zu erhalten, oder rufen Sie den Befehl auf stty -a und analysieren Sie die Ergebnisse für rows und columns
Ich möchte nur sagen, dass COLUMNS & ROWS nicht in Terminal.app unter Mac OS X festgelegt sind. Ich hatte auch Probleme damit, dass diese inkonsistent sind (z. B. funktionierten sie in irb, aber nicht beim Ausführen eines Ruby-Skripts usw.).
– Jeffrey Aylesworth
4. Februar 2010 um 21:49 Uhr
Die Umgebungsvariablen werden auch nicht aktualisiert, wenn die Größe des Terminals geändert wird, während Ihr Programm ausgeführt wird.
– vergänglich
4. Februar 2010 um 22:01 Uhr
Getenv funktioniert tatsächlich nicht, $_ENV auch nicht. Aber danke für den Hinweis auf stty -a, ich werde das analysieren 🙂
– SchizoDuckie
4. Februar 2010 um 22:25 Uhr
Ich mag die Portabilität meiner aktuellen Lösung 🙂 Nicht alle Boxen haben ncurses in PHP, also möchte ich, dass es so einfach wie möglich ist
– SchizoDuckie
4. Februar 2010 um 23:31 Uhr
Angesichts der Tatsache, dass Sie der Gewinner dieser Frage sind und dass Ihr Top-Vorschlag derzeit eine „EXPERIMENTELLE“ Funktion ist (ihre Großbuchstaben, nicht meine), könnten Sie sich einen Moment Zeit nehmen und die verschiedenen Methoden hier konsolidieren und die tatsächlich richtige Antwort zeigen. Zumal Sie auf die ioctl-Methode als bevorzugte Methode anspielen (ohne zu sagen, warum sie die beste ist), aber Sie zeigen nicht wirklich, wie das geht. ANMERKUNG AN SELBST: Anstatt sich darüber zu beschweren, warten Sie sechs Monate und schreiben Sie eine wirklich gute Antwort. Denken Sie daran, Joe dafür zu danken, dass er eine Antwort geschrieben hat, anstatt nur zu gehorchen …
– ftrotter
18. September 2017 um 6:29 Uhr
$COLUMNS und $LINES wird wahrscheinlich nicht in Ihr Programm exportiert. Du kannst rennen export LINES COLUMNS bevor Sie Ihre App ausführen, oder Sie können diese Informationen direkt abrufen:
Ich weiß nicht, wozu man das überhaupt brauchen sollte grep zu analysieren stty Ausgabe: Es gibt eine separate Option, um “die Anzahl der Zeilen und Spalten gemäß dem Kernel” zu melden.
Vielleicht das Verknüpfung könnte die Antwort sein, Sie könnten dafür die ANSI-Escape-Codes verwenden, indem Sie die verwenden echo unter Verwendung der spezifischen Escape-Code-Sequenz, insbesondere des ‘Query Device’, das ich unter einem anderen Link gefunden habe hier das erklärt ausführlich. Vielleicht können Sie damit die Spalten und Zeilen des Bildschirms abrufen …
Diese Antwort weist auf 2 Links hin, die tot sind. Diese Antwort erklärt auch nicht, wie die Konsolengröße nach dem Senden der Escape-Sequenz abgerufen wird.
– Ismael Miguel
17. Januar um 7:18 Uhr
Magallanen
Fürs Protokoll, es ist meine Funktion (PHP 7.2 und höher):
Es funktioniert unter Windows und Linux. Im Fehlerfall wird 80 zurückgegeben.
Im Falle eines verrückten oder zu kleinen Werts wird der Mindestwert (80) zurückgegeben.
ps: “mode con” gibt zwar die Anzahl der Zeilen zurück, basiert aber auf dem Puffer als auf der Bildschirmgröße.
ps2: Seltsamerweise, aber wenn ich es als Website ausführe, gibt es 120 (Windows Host) zurück.
Diese Antwort weist auf 2 Links hin, die tot sind. Diese Antwort erklärt auch nicht, wie die Konsolengröße nach dem Senden der Escape-Sequenz abgerufen wird.
– Ismael Miguel
17. Januar um 7:18 Uhr
Johannes
Umgebungsvariablen finden Sie in der superglobalen Variablen $_ENV.
echo $_ENV['ROWS'];
zum Beispiel.
“Ich habe viele Dinge versucht, wie das Durchsuchen von $_ENV, exec(“echo $COLUMNS”) usw., aber kein Ergebnis”, sagte der Poster.
– MAChitgarha
1. Februar 2019 um 9:52 Uhr
10927200cookie-checkWie bekomme ich die Linux-Konsole $ COLUMNS und $ ROWS von PHP CLI?yes
Also ähm… Mir ist klar, dass es fast 10 Jahre her ist, aber hast du immer noch diese CLI-Bibliothek? GitHub? 🙂
– MSpreis
20. September 2019 um 22:40 Uhr