STDIN wird nicht gelesen
Krikael
- perl
0 RoRo0 Krikael0 Klaus Mock0 Krikael
0 Kai Diefenbach
Präzisierung der Frage von heute morgen:
(sorry, war ein Schnellschuss...)
Allen Programmen, die ich in meiner Perl-Umgebung auf dem rechnereignenen Webserver teste, ist es nicht möglich, die Standardeingabe (STDIN) wie folgt auszulesen.
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
(... so gelesen bei http://www.teamone.de/selfhtml/tga.htm#a3 und http://www.teamone.de/selfhtml/tgcd.htm)
Die eingelesene Variable $Daten bleibt immer leer. Auch $Variable = <STDIN> funktioniert nicht.
Please help!
MfG Krikael
moin,
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
wenns darum geht Formularfelder auszulesen dann machs dir doch nicht so schwer, nimm cgi-lib.pl oder CGI.pm
http://i-netlab.de/cgilib/cgilib.htm
Rolf
Nett gemeint, aber mein Problem ist damit nicht gelöst - auch cgi-lib.pl greift auf STDIN zu, aber STDIN kann ich irgendwie nicht auslesen. Kann das an den Servereinstellungen liegen? Oder an der PERL-Konfiguration? Ich habe - wie von Stefan empfohlen - Xitami als Webserver und die neueste Perl-Version installiert.
Krikael
Hallo,
[...] auch cgi-lib.pl greift auf STDIN zu, aber STDIN kann ich irgendwie nicht auslesen.
Das Problem mliegt wohl eher daran, wie das script aufgerufen wird.
Es stehen ja grundsätzlich mal zwei Wege offen.
1.) HTTP-Methode GET:
das passiert wenn Du direkt den URL in die Adresszeile Deines Browsers eingibst, oder über einen Link aufgerufen wirst, oder aber per HTML-Formular, das mit 'method="GET"' oder auch ohne 'method'-Attribut definiert wurde.
Dann stehen die Parameter in $ENV{QUERY_STRING} (in der Form 'name=wert&name2=wert2' und müssen entsprechend zerlegt werden.
2.) HTTP-Methode POST:
das passiert wenn das Formular mit dem Attribut 'method="POST"' definiert wurde.
Erst dann bekommst Du die Parameter per <STDIN> in verbindung mit $ENV{'CONTENT_LENGTH'} raus.
Aber,....
Diese Entscheidungen und noch einiges anderes wird von CGI.pm bzw. cgi-lib.pl bereits für Dich erledigt. Die Daten werden aufbereitet und stehen ganz bequem zum Weiterverwenden bereit.
Also warum das Rad nochmals erfinden?
Grüße
Klaus
PS.: Die Beispiele für das Erzeugen von HTTP-Requests sind natürlich nicht vollständig. Es gibt noch eine Unzahl anderer Möglichkeiten, solche Requests zu erzeugen (beispielsweise mit telnet), aber das steht auf einem anderen Blatt ;-)
Für alle, die es noch interessiert: Das Problem, welches ich hatte, ist gelöst, und hatte NICHTS mit den Methoden "Get" und "Post" zu tun (soviel kann ich in SelfHTML schließlich noch selber nachlesen), sondern anscheinend mit den Einstellungen des XITAMI-Webservers, den ich bei mir installiert hatte. Sobald ich eine andere Version installiert hatte, liefen alle Perl-Scripte mit STDIN problemlos.
Darauf hätte - zugegeben - aber auch sonst keiner kommen können.
Danke trotzdem. Krikael
Hallo,
Allen Programmen, die ich in meiner Perl-Umgebung auf dem rechnereignenen Webserver teste, ist es nicht möglich, die Standardeingabe (STDIN) wie folgt auszulesen.
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
Die eingelesene Variable $Daten bleibt immer leer.
Du weißt, Daß Du hier die POST-Methode verwenden mußt?
Gruß Kai