Start · Sprachen · PHP · Referenz · readline_redisplay

readline_redisplay

Funktion

Zeichnet die aktuelle Readline-Eingabezeile neu auf dem Bildschirm.

seit PHP 7.1.0 Kategorie: io

Signatur

readline_redisplay(): void

Beschreibung

readline_redisplay() veranlasst die GNU-Readline-Bibliothek, die aktuell angezeigte Eingabezeile neu zu zeichnen. Dies entspricht dem internen Readline-Kommando redisplay und ist nützlich, wenn die Anzeige durch externe Ausgaben (z. B. Hintergrundprozesse oder asynchrone Nachrichten) beschädigt wurde.

Die Funktion wird typischerweise in eigenen Readline-Callback-Funktionen eingesetzt, die über readline_callback_handler_install() registriert wurden. Wenn in solchen Callbacks Ausgaben auf die Konsole geschrieben werden, kann danach readline_redisplay() aufgerufen werden, um die Eingabeaufforderung und den bisher eingegebenen Text wieder korrekt anzuzeigen.

Die Funktion wirkt nur dann, wenn PHP mit Readline-Unterstützung kompiliert wurde und in einer interaktiven Terminal-Umgebung (TTY) läuft. In Webserver-Umgebungen oder nicht-interaktiven Skripten hat sie keine Wirkung.

Rückgabewert

Typ
void
Beschreibung
Gibt keinen Wert zurück.

Beispiele

Eingabezeile nach einer Ausgabe neu zeichnen

<?php
// Readline-Callback installieren
readline_callback_handler_install('> ', function (string $line): void {
    // Eingabe verarbeiten
    echo "Eingabe: $line\n";
    // Prompt neu zeichnen
    readline_redisplay();
});

// Simuliere eine externe Ausgabe, die den Prompt überschreibt
echo "[INFO] Hintergrundnachricht\n";

// Eingabezeile nach der Ausgabe neu rendern
readline_redisplay();

// Aufräumen
readline_callback_handler_remove();
[INFO] Hintergrundnachricht >

Verwendung in einer interaktiven REPL-Schleife

<?php
readline_callback_handler_install('php> ', function (string $input): void {
    if (trim($input) === 'exit') {
        readline_callback_handler_remove();
        exit(0);
    }
    $result = eval("return $input;");
    echo var_export($result, true) . "\n";
    // Prompt nach jeder Ausgabe neu zeichnen
    readline_redisplay();
});

while (true) {
    $r = [STDIN];
    $w = null;
    $e = null;
    if (stream_select($r, $w, $e, null) > 0) {
        readline_callback_read_char();
    }
}

// Wichtig · Fallstricke

Verfügbarkeit: Die Funktion steht nur zur Verfügung, wenn PHP mit der GNU-Readline-Bibliothek kompiliert wurde (Konfigurationsoption --with-readline). Auf manchen Systemen wird stattdessen libedit verwendet, das eine ähnliche, aber nicht identische API bietet.

Terminal-Voraussetzung: readline_redisplay() hat nur in einer interaktiven Terminal-Sitzung eine sichtbare Wirkung. In CGI-, CLI-Pipe- oder Webserver-Kontexten ohne echtes TTY bleibt der Aufruf wirkungslos.