Signatur
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
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();
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.