Kürzlich benötigte ich für eine PHP Konsolenanwendung die Ausgabe einer Statuszeile. Die ausgegebene Zeile sollte jedoch nicht (wie sonst üblich) jeweils in einer neuen Zeile landen, sondern immer in der selben Zeile – so dass man einen schnellen Überblick über den Scriptstatus bekommt. Wie auch immer – ich habe mich dann etwas durch die Terminal ANSI Escape Sequenzen gekämpft und das ganze mit meinem PHP Script kombiniert. Folgend die entsprechende Funktion für die Ausgabe:
function echoFixedLine($string) {
echo "\033[K" . $string . "\033[" . strlen ($string) . "D";
}
echo "TEST:";
for ($i=0; $i<=100; $i++) {
echoFixedLine("Number: " . $i);
sleep(1);
}
// Ausgabe nach ca. 101 Sekunden:
TEST:
Number: 100
Die Funktion löscht immer zunächst die ganze Zeile, schreibt dann den gewünschten String und positioniert anschließend den Cursor wieder an den Anfang für die eventuelle nächste Zeile. Denkbar wären damit z.B. auch "grafische" Fortschrittsanzeigen...
Hier ein paar weiter Informationen zu den Escape-Sequenzen - eine komplette Referenz haben ich leider noch nicht gefunden.
One reply on “PHP/bash: Konsolenausgabe positionieren”
http://en.wikipedia.org/wiki/ANSI_escape_code