Signatur
Beschreibung
readline() liest eine Zeile interaktiv von der Standardeingabe (stdin) ein und gibt den eingegebenen Text als Zeichenkette zurück. Die Funktion basiert auf der GNU-Readline-Bibliothek und ist daher nur verfügbar, wenn PHP mit dieser Bibliothek kompiliert wurde (typischerweise unter Linux/macOS, unter Windows nur in bestimmten Builds).
Mit dem optionalen Parameter $prompt lässt sich ein Aufforderungstext definieren, der vor der Eingabe angezeigt wird – ähnlich wie bei einem Terminalfenster. Der eingegebene Text wird ohne abschließendes Zeilenumbruchzeichen zurückgegeben.
Die Funktion wird vor allem in interaktiven CLI-Skripten eingesetzt, zum Beispiel um Benutzereingaben wie Passwörter, Menüauswahlen oder Konfigurationswerte entgegenzunehmen. In Kombination mit readline_add_history() können Eingaben in die Verlaufshistorie aufgenommen werden, sodass der Benutzer per Pfeiltaste durch frühere Eingaben navigieren kann.
Wird die Funktion ohne Readline-Unterstützung aufgerufen oder ist PHP nicht interaktiv, kann es zu unerwartetem Verhalten kommen. In solchen Fällen ist fgets(STDIN) eine portable Alternative.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $prompt | string|null | null | Optionaler Eingabeaufforderungstext, der vor der Benutzereingabe angezeigt wird. Wird null übergeben oder der Parameter weggelassen, erscheint kein Aufforderungstext. |
Rückgabewert
string zurück (ohne abschließendes Zeilenumbruchzeichen). Bei einem Fehler (z. B. EOF) wird false zurückgegeben.Beispiele
Einfache Benutzereingabe mit Aufforderungstext
<?php
$name = readline('Bitte gib deinen Namen ein: ');
if ($name !== false) {
echo "Hallo, " . htmlspecialchars($name) . "!\n";
} else {
echo "Keine Eingabe erhalten.\n";
}
Eingaben mit Verlaufshistorie speichern
<?php
echo "Gib 'quit' ein, um das Programm zu beenden.\n";
while (true) {
$input = readline('> ');
if ($input === false || strtolower(trim($input)) === 'quit') {
echo "Auf Wiedersehen!\n";
break;
}
if (trim($input) !== '') {
readline_add_history($input); // Eingabe in Verlauf aufnehmen
}
echo "Du hast eingegeben: " . htmlspecialchars($input) . "\n";
}
Portable Alternative mit fgets für Umgebungen ohne Readline
<?php
// Prüfen ob readline verfügbar ist
if (function_exists('readline')) {
$eingabe = readline('Deine Eingabe: ');
} else {
echo 'Deine Eingabe: ';
$eingabe = rtrim(fgets(STDIN), "\n");
}
echo "Erhalten: " . $eingabe . "\n";
// Wichtig · Fallstricke
Verfügbarkeit: readline() ist nur verfügbar, wenn PHP mit der GNU-Readline-Bibliothek (oder Libedit) kompiliert wurde. Unter Windows ist dies nicht immer der Fall. Mit function_exists('readline') lässt sich die Verfügbarkeit zur Laufzeit prüfen.
Sicherheit: Benutzereingaben sollten stets validiert und, wenn sie in HTML ausgegeben werden, mit htmlspecialchars() kodiert werden, um XSS zu vermeiden. Bei der Verarbeitung in Datenbankabfragen sind vorbereitete Statements (Prepared Statements) zu verwenden.
Passwörter: readline() gibt die Eingabe im Klartext zurück und zeigt sie in der Regel im Terminal an. Für Passworteingaben sollte auf plattformspezifische Methoden zurückgegriffen werden (z. B. shell_exec('stty -echo') unter Unix), um die Eingabe zu verbergen.
Nur für CLI: Die Funktion ist ausschließlich für den Einsatz in CLI-Skripten gedacht. Im Web-Kontext (z. B. unter Apache/FPM) ist sie nutzlos und kann zu unerwartetem Verhalten führen.