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