Start · Sprachen · PHP · Referenz · readline_on_new_line

readline_on_new_line

Funktion

Informiert die Readline-Bibliothek darüber, dass der Cursor auf eine neue Zeile bewegt wurde, damit die Darstellung korrekt bleibt.

seit PHP 5.0.0 Kategorie: io

Signatur

readline_on_new_line(): void

Beschreibung

readline_on_new_line() teilt der zugrundeliegenden GNU-Readline-Bibliothek mit, dass der Cursor sich nun am Anfang einer neuen Zeile befindet. Dies ist notwendig, wenn das PHP-Skript eigenständig einen Zeilenumbruch ausgegeben hat, ohne dass Readline davon weiß – etwa durch echo oder print –, damit die interne Cursor-Position von Readline wieder korrekt synchronisiert ist.

Readline verwaltet intern den Zustand des Terminals, einschließlich der aktuellen Cursor-Position. Wenn externe Ausgaben (z. B. Statusmeldungen, Logzeilen) direkt in den Ausgabestrom geschrieben werden, verliert Readline die Übersicht über die tatsächliche Cursorposition. Der nächste Prompt kann dann an einer falschen Stelle erscheinen oder die Eingabezeile wird beschädigt dargestellt.

Typischerweise wird diese Funktion in interaktiven Kommandozeilenanwendungen eingesetzt, die Readline für eine komfortable Eingabe nutzen (readline()) und dabei gleichzeitig asynchrone oder unterbrechende Ausgaben erzeugen müssen. Durch den Aufruf von readline_on_new_line() direkt nach einer solchen Ausgabe bleibt die Darstellung konsistent.

Die Funktion steht nur auf Systemen zur Verfügung, auf denen PHP mit Readline-Unterstützung kompiliert wurde (üblicherweise Linux/macOS). Unter Windows ist diese Funktion in der Regel nicht verfügbar.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Prompt nach eigener Ausgabe korrekt positionieren

<?php
// Interaktive CLI-Schleife mit zwischenzeitlichen Ausgaben
while (true) {
    // Eigene Ausgabe (z. B. Statusmeldung), die eine neue Zeile erzeugt
    echo "[Status] Bereit für Eingabe.\n";

    // Readline mitteilen, dass wir uns jetzt am Anfang einer neuen Zeile befinden
    readline_on_new_line();

    // Erst jetzt den Prompt anzeigen und Eingabe lesen
    $input = readline('> ');

    if ($input === false || strtolower(trim($input)) === 'exit') {
        echo "Auf Wiedersehen!\n";
        break;
    }

    // Eingabe zur History hinzufügen
    readline_add_history($input);

    echo "Eingabe war: " . htmlspecialchars($input) . "\n";
}
[Status] Bereit für Eingabe. > Hallo Eingabe war: Hallo [Status] Bereit für Eingabe. > exit Auf Wiedersehen!

Verwendung nach einer Fortschrittsanzeige

<?php
// Simulierte Fortschrittsanzeige ohne abschließenden Zeilenumbruch
echo "Lade Daten...";
flush();

// Verarbeitung...
sleep(1);

// Zeilenumbruch ausgeben
echo "\n";

// Readline über neue Zeile informieren
readline_on_new_line();

// Jetzt sicher Readline-Prompt anzeigen
$antwort = readline('Weiter? (j/n): ');
echo "Antwort: $antwort\n";
Lade Daten... Weiter? (j/n): j Antwort: j

// Wichtig · Fallstricke

Plattformabhängigkeit: Diese Funktion ist nur verfügbar, wenn PHP mit der GNU-Readline-Bibliothek kompiliert wurde. Unter Windows steht sie in der Regel nicht zur Verfügung. Mit function_exists('readline_on_new_line') lässt sich die Verfügbarkeit prüfen.

Verwendungskontext: Die Funktion ist nur in CLI-Skripten sinnvoll, die readline() für interaktive Eingaben verwenden. In Web-Kontexten hat sie keine Wirkung und sollte dort nicht aufgerufen werden.

Wird diese Funktion vergessen, können optisch verschobene oder überschriebene Prompts und Eingabezeilen auftreten, was die Benutzerfreundlichkeit der Anwendung stark beeinträchtigt.