STDIN
Ingo Lange
- perl
0 Cheatah0 Ingo Lange0 Cheatah
Hallo.
Ich habe in CGI folgendes Problem mit STDIN:
Das einlesen eines Formularfeldes mit read...
...read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
...$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
(dies ist nur ein Teilauszug)
funktioniert super, leider nicht mit
...$twert = <STDIN>;
Wenn ich mit Letzterem versuchem, Daten in $twert zu übernehmen, fängt der Browser (mit beiden probiert) an zu suchen und hört nicht mehr auf. WebServer ist der IIS4 von MS, die Reg. ist angepaßt und das cgi-bin Verzeichnis richtig angelegt (denke ich).
Aber: mit allen möglichen Perl-Scripts und dem o.g. read Befehl funktioniert es ja auch.
Woran liegt das ? Ist die der Satz $twert = <STDIN>; vielleicht generell falsch ?
Im Voraus vielen Dank für Eure Mühen
Mit freundlichen Grüßen - Ingo
Hi,
Das einlesen eines Formularfeldes mit read...
...read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
...$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
laß das besser.
use CGI ':standard';
print param('name');
Woran liegt das ? Ist die der Satz $twert = <STDIN>; vielleicht generell falsch ?
Nein, nur macht das über das CGInterface wenig Sinn. Insbesondere wenn Du STDIN bereits gelesen hast, existiert keine Endemarkierung mehr - und Dein Script wartet ewig und drei Tage.
Mag übrigens sein, daß meine Beschreibung leichte bis mittelschwere Mängel hat; ich bin nur bisher nicht auf den Gedanken gekommen, in einem CGI-Script STDIN zu lesen, deswegen habe ich mich mit den Interna noch nicht näher beschäftigt...
Cheatah
Hi,
laß das besser.
use CGI ':standard';
print param('name');
Hallo Hajo.
Danke für die schnelle Antwort.
Ähm, ich fang grad erst an mit diesen "Sachen"...
Also, das STDIN wird aber doch in allen möglichen Dokus so beschrieben. Und der read-Befehl (geht doch in Ordnung, oder?) erscheint in den meisten CGI-Skripten, die man sieht.
Wenn ich in einem Formular-Feld "name" einen Wert mit Method="Post" eingebe, wie bekomme ich diesen Wert (bzw. dieses Wertepaar) dann mit Deinem Vorschlag zur Weiterverarbeitung in das Script (in ein Array o.ä.) ?
Vielen Dank - Ingo
Hi,
Also, das STDIN wird aber doch in allen möglichen Dokus so beschrieben. Und der read-Befehl (geht doch in Ordnung, oder?) erscheint in den meisten CGI-Skripten, die man sieht.
diese Technik ist veraltet und sollte deshalb nicht mehr verwendet werden, weil sich je nach Script und Autor schon mal ein Bug einschleichen kann. Das Modul CGI.pm macht im Prinzip das gleiche, ist aber (weitgehend?) bugfrei und bewährt. Wenn ein Bug festgestellt wird, gibt es ein Fix, das für _alle_ Deine Scripts gilt.
Wenn ich in einem Formular-Feld "name" einen Wert mit Method="Post" eingebe, wie bekomme ich diesen Wert (bzw. dieses Wertepaar) dann mit Deinem Vorschlag zur Weiterverarbeitung in das Script (in ein Array o.ä.) ?
Exakt genau so. Benutze CGI.pm, Du brauchst Dich um solche Details nicht mehr zu kümmern.
Cheatah