Signatur
Beschreibung
readline_add_history() fügt den übergebenen String zur internen History-Liste der GNU-Readline-Bibliothek hinzu. Dadurch kann ein Benutzer in interaktiven CLI-Anwendungen zuvor eingegebene oder programmatisch hinzugefügte Einträge mit den Pfeiltasten (↑/↓) abrufen.
Diese Funktion ist besonders nützlich, wenn man eine interaktive Shell oder ein REPL (Read-Eval-Print-Loop) in PHP implementiert. Man kann typische oder häufig benötigte Befehle vorab in die History eintragen, sodass der Benutzer sie direkt ohne erneute Eingabe nutzen kann.
Die History ist nur für die aktuelle Laufzeit der Anwendung persistent, sofern sie nicht explizit mit readline_write_history() in eine Datei gespeichert und mit readline_read_history() beim nächsten Start geladen wird.
Voraussetzung ist, dass PHP mit Readline-Unterstützung kompiliert wurde (typischerweise unter Linux/macOS verfügbar; unter Windows ist diese Erweiterung standardmäßig nicht enthalten).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $prompt Pflicht | string | Der Text-Eintrag, der der Readline-History hinzugefügt werden soll. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Readline-Erweiterung nicht verfügbar ist).Beispiele
Einfache Readline-Schleife mit History
<?php
// Vordefinierte Einträge in die History laden
readline_add_history('hilfe');
readline_add_history('beenden');
readline_add_history('status anzeigen');
echo "Interaktive Shell (Beenden mit 'beenden')\n";
while (true) {
$input = readline('> ');
if ($input === false || trim($input) === 'beenden') {
echo "Auf Wiedersehen!\n";
break;
}
if (trim($input) !== '') {
// Benutzereingabe ebenfalls zur History hinzufügen
readline_add_history($input);
echo "Eingabe: " . htmlspecialchars($input) . "\n";
}
}
History speichern und beim nächsten Start laden
<?php
$historyFile = '/tmp/meine_shell_history';
// Bestehende History aus Datei laden (falls vorhanden)
if (file_exists($historyFile)) {
readline_read_history($historyFile);
}
// Vordefinierte Befehle hinzufügen
readline_add_history('liste ausgeben');
readline_add_history('hilfe');
$input = readline('Befehl: ');
if ($input !== false && trim($input) !== '') {
readline_add_history($input);
echo "Ausgeführt: $input\n";
}
// History für den nächsten Start speichern
readline_write_history($historyFile);
echo "History gespeichert in: $historyFile\n";
// Wichtig · Fallstricke
Plattformverfügbarkeit: Die Readline-Erweiterung ist unter Windows standardmäßig nicht verfügbar. Skripte, die readline_add_history() verwenden, sind daher nicht ohne Weiteres plattformübergreifend einsetzbar.
CLI only: Diese Funktion ist nur in CLI-Skripten sinnvoll. In Webserver-Kontexten (z. B. Apache, FPM) steht keine interaktive Eingabe zur Verfügung und die Funktion hat keinen praktischen Nutzen.
Die Readline-Erweiterung kann mit extension_loaded('readline') geprüft werden, bevor sie verwendet wird.