phpbar.de logo

Mailinglisten-Archive

[php] Von STDIN lesen (Passworteingabe)

[php] Von STDIN lesen (Passworteingabe)

Mathias Gloss mgloss at amadeus.net
Fre Aug 20 16:00:20 CEST 2004


Aloha,




> From: Roland Tapken <ml at lalamuhkuh.de>@phpbar.de  on 20.08.2004 15:33 
ZE2

> Die Lösung hab ich zwar nicht, aber nach einigen experimenten sieht es
> so aus, dass die while-Schleife erst beginnt, wenn das "\n" gesendet
> worden ist, und die Eingabe dann halt Zeichen für Zeichen verarbeitet
> wird. Irgendwie müsste man also dem Eingabepuffer sagen, dass er nach
> jedem Zeichen senden soll, nicht erst nach einem \n.

Kleine Änderung:

#!/usr/bin/php4 -q
<?
$sTermconfig = `stty -g`;
`stty -echo`;
echo "Bitte Passwort eingeben:\n";
$rF = fopen('php://stdin', 'r');
$sPasswort = '';
$sZeichenzaehler = 0;
while ( false !== ( $sZeichen = fgetc($rF) ) ) {
  if ( $sZeichen == "\n" ) { break; }
  $sPasswort .= $sZeichen;
  $sZeichenzaehler++;
  echo '*';# tut hier nicht wirklich mit der Zeichen-
  flush(); # weisen Ausgabe der Sterne :-//
}
echo "\nDas Passwort ist: $sPasswort\n";
echo "Es wurden $sZeichenzaehler Zeichen eingegeben\n";
`stty $sTermconfig`;
?>

---------------> liefert:

gloss at fralix1vm:~/termtest$ ./test.php4
Bitte Passwort eingeben:
*****
Das Passwort ist: hallo
Es wurden 5 Zeichen eingegeben

Also die Zeichen werden schon Zeichenweise eingelesen (dafür 
steht ja auch das c in fgetc). Dementsprechend läuft die Schleife
auch 6 mal durch (incl. des \n) Nur irgendwas scheint da doch noch
zu puffern .... argel .... vielleicht  ....

gloss at fralix1vm:~/termtest$ cat test.php4
#!/usr/bin/php4 -q
<?
$sTermconfig = `stty -g`;
echo "Bitte Passwort eingeben:\n";
$rF = fopen('php://stdin', 'r');
$sPasswort = '';
`stty -echo`;
while ( false !== ( $sZeichen = fgetc($rF) ) ) {
  if ( $sZeichen == "\n" ) { break; }
  $sPasswort .= $sZeichen;
  `stty $sTermconfig`;
  echo '*';
  flush();
  `stty -echo`;
}
`stty $sTermconfig`;
echo "\nDas Passwort ist: $sPasswort\n";
?>

ne, ändert leider auch nix wenn man vor der Ausgabe 
das Terminal wieder einschalten  :-////

Außerdem schaltet -echo nur das Echo der eingabe ab.

*grübelnd* Mathias




php::bar PHP Wiki   -   Listenarchive