Signatur
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
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";
}
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";
// 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.