Mailinglisten-Archive |
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