Krikael: STDIN wird nicht gelesen

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

  1. 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

    1. http://i-netlab.de/cgilib/cgilib.htm

      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

      1. 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 ;-)

        1. 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

  2. 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