Eingabeaufforderung für die Befehlszeile in PHP
Schreibe ich ein Kommandozeilen-tool zu helfen, meine web-app. Es benötigt ein Kennwort, um eine Verbindung zum Dienst herzustellen. Ich würde gerne das Skript, um zu zeigen, eine Passwort-Abfrage, damit ich nicht haben, um es zu übergeben, als ein command line argument.
Das ist einfach genug, aber ich möchte es nicht echo das Passwort auf dem Bildschirm angezeigt, wie es eingegeben wurde. Wie kann ich dies mit PHP?
Bonus-Punkte für das tun es in reinem PHP (keine system('stty')
) und ersetzt die Zeichen mit *
.
EDIT:
Das Skript auf einem unix-artigen system (linux oder mac). Das Skript ist in PHP geschrieben und wird wahrscheinlich so bleiben.
Auch für die Aufzeichnung, die stty
Weg, es zu tun ist:
echo "Password: ";
system('stty -echo');
$password = trim(fgets(STDIN));
system('stty echo');
//add a new line since the users CR didn't echo
echo "\n";
Ich würde es vorziehen, nicht die system()
ruft dort.
InformationsquelleAutor der Frage Gary Richardson | 2008-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gefunden auf sitepoint.
InformationsquelleAutor der Antwort DaveHauenstein
Können Sie meine hiddeninput.exe - Datei zu bekommen, real hidden-input, ohne zu lecken überall auf Informationen auf dem Bildschirm.
Wenn Sie entfernen das Letzte echo, das Passwort sollte nie angezeigt, aber Sie können verwenden, dass für die Validierung obvoiusly.
InformationsquelleAutor der Antwort Seldaek
Abhängig von Ihrer Umgebung (D. H. nicht unter Windows), können Sie die Verwendung der ncurses-Bibliothek (insbesondere die ncurses_noecho() - Funktion zu stoppen, Tastatur-echo und ncurses_getch() zum Lesen der Eingabe) um das Passwort zu erhalten, ohne die Anzeige auf dem Bildschirm.
InformationsquelleAutor der Antwort Randy
Ich denke, dass es keinen einfachen Weg, es zu tun (eigentlich kann ich nicht glauben, jeder Art und Weise), ohne mit stty -echo.
Wenn Sie die Absicht, es läuft auf windows, können Sie eine batch-Skript, das die unechoed eingegeben info zum php-Skript.
Beispiel von http://www.indiangnu.org/2008/php-hide-user-input-using-batch-script-windows/
InformationsquelleAutor der Antwort Gabriel Gilini
Dies ist die einfachste Lösung für alle Plattformen:
Dann erstellen
prompt_win.bat
im gleichen Verzeichnis:InformationsquelleAutor der Antwort mpyw
Warum nicht verwenden Sie eine SSH-Verbindung? Sie können abstrakte Befehle entfernt, umleiten von Eingabe - /Ausgabe und haben die volle Kontrolle.
Können Sie jemanden mit einem reinen shell-mit so wenig Rechte wie nötig, und lassen Sie das Passwort einfach POSTEN ' ed zusammen mit SSH2::Connect() an die shell öffnen.
Erstellte ich eine nette Klasse zum arbeiten mit php-SSH2-extension, vielleicht hilft es dir;
(und es auch tut, secure file Transfer)
Beispiel:
InformationsquelleAutor der Antwort SchizoDuckie
Die akzeptierte Antwort ist nicht gut genug. Zuerst von allen, ist die Windows-Lösung funktioniert nicht unter Windows 7 und höher. Die Lösung für andere Betriebssysteme, hängt von Bash und bash built-in "gelesen". Allerdings gibt es Systeme, welche nicht mit Bash (zB. OpenBSD), und wo dies offensichtlich nicht funktioniert.
In diesem blog, die ich erörtert habe-Lösung, die funktioniert auf fast jedem Unix-basierte OS und Windows von 95-8. Die Windows-Lösung verwendet das externe Programm in C geschrieben ist, auf der Oberseite Win32-API. Die Lösung für andere Betriebssysteme verwendet externe Befehl 'stty'. Ich habe noch zu sehen, ein Unix-basiertes system, das nicht 'stty'
InformationsquelleAutor der Antwort robert petranovic
Funktioniert auf jedem windows-system, das hat powershell-Unterstützung. (Quelle: http://www.qxs.ch/2013/02/08/php-cli-password-prompts-on-windows-7/ )
InformationsquelleAutor der Antwort JMW
Habe ich neu formatiert JMW's 3 line-Lösung, so können Sie einfach Ausschneiden und fügen Sie es in Ihre bestehenden PHP-code.
:
Bin ich auf Powershell V5.0 aber das Verzeichnis Pfad zeigt immer noch als v1.0, so dass die Zeichenfolge in Anführungszeichen in die shell_exec aufrufen sollte OK sein.
InformationsquelleAutor der Antwort Michael
Theoretisch kann man es mit stream_set_blocking(), aber sieht aus wie es gibt einige PHP-Fehler verwalten von STDIN.
Aussehen:
http://bugs.php.net/bug.php?id=34972
http://bugs.php.net/bug.php?id=36030
Selbst ausprobieren:
InformationsquelleAutor der Antwort Slipo