Harald: Fehler in Programm

Hallo @ all,

Ich habe gerade begonnen, mich mit CGI zu bescheftigen, doch schon die ersten Zeilen funktionieren nicht:

open(HOMEDATEI, "<home.txt") || die "Fehler beim Öffnen der Datei: $!\n";
while(defined($i = <HOMEDATEI>)) { print $i; }
close(HOMEDATEI);

Ausgegeben wird ein Software Error, woran liegt das?

-------------
Mfg: Harry

  1. Halihallo Harry

    Ich habe gerade begonnen, mich mit CGI zu bescheftigen, doch schon die ersten Zeilen funktionieren nicht:

    open(HOMEDATEI, "<home.txt") || die "Fehler beim Öffnen der Datei: $!\n";
    while(defined($i = <HOMEDATEI>)) { print $i; }
    close(HOMEDATEI);

    Ausgegeben wird ein Software Error, woran liegt das?

    kann viele Ursachen haben. Wenn du den Perl-Fehler sehen willst, füge am besten

    use CGI::Carp qw(fatalsToBrowser);

    am Anfang des Scriptes an.

    use strict;

    meldet dir einige Fehler, die besonders am Anfang häufig passieren.

    Dein Script enthält keine Fehler (mal von der uniniziierten Variable $i abgesehen). Folglich tippe ich darauf, dass du keine Header zurückgibst. Der Browser muss wissen, was du ihm sendest:

    print 'Content-Type: text/html'."\015\012\015\012";

    am Anfang einfügen.

    Viele Grüsse

    Philipp

    1. Hallo Philipp,

      1. Danke für die Antwort
      2. Ich fürchte, daran hat es nicht gelegen:

      Das gesamte Script sieht wie folgt aus:

      #!/usr/bin/perl -w

      use strict;
      use CGI::Carp qw(fatalsToBrowser);

      print "Content-type: text/html\n\n";
      print "<h1>Hurra, es klappt!</h1>\n";

      $i = "";
      open(HOMEDATEI, "<home.txt") || die "Fehler beim Öffnen der Datei: $!\n";
      while(defined($i = <HOMEDATEI>)) { print $i; }
      close(HOMEDATEI);

      und ohne die letzten 3 Zeilen funktioniert es problemlos, dann allerdings steht:
      Software error:Execution of /test.cgi aborted due to compilation errors.

      -----------------
      Mfg: Harry

      1. Halihallo

        1. Danke für die Antwort

        bitte ;)

        1. Ich fürchte, daran hat es nicht gelegen:

        tja, dann weiter ;)

        und ohne die letzten 3 Zeilen funktioniert es problemlos, dann allerdings steht:
        Software error:Execution of /test.cgi aborted due to compilation errors.

        Tja, vor das $i noch ein 'my ' und dann gehts ;)
        Du musst beim deklarieren von Variablen im strict-Modus immer ein my davor hängen! - Teste deine Programme immer zuerst bei dir lokal in der Shell, dann siehst du auch die Fehlermeldungen, denn der 500-er "Softwareerror" vom Webserver sagt dir herzlich wenig, optional auch das Log-File des Webservers einsehen, dort sollte die Fehlermeldung auch sichtbar sein.

        Viele Grüsse

        Philipp

      2. hi,

        »» Hallo Philipp,

        1. Danke für die Antwort
        2. Ich fürchte, daran hat es nicht gelegen:

        Das gesamte Script sieht wie folgt aus:

        #!/usr/bin/perl -w

        use strict;
        use CGI::Carp qw(fatalsToBrowser);

        print "Content-type: text/html\n\n";
        print "<h1>Hurra, es klappt!</h1>\n";

        $i = "";
        open(HOMEDATEI, "<home.txt") || die "Fehler beim Öffnen der Datei: $!\n";
        while(defined($i = <HOMEDATEI>)) { print $i; }
        close(HOMEDATEI);

        liegt daran dass das was die() ausgibt nie im brower ankommt.

        Tipp:
        Lass das Script mal auf der KdoZeile laufen und schau auch mal ins error_log.

        Rolf

        und ohne die letzten 3 Zeilen funktioniert es problemlos, dann allerdings steht:
        Software error:Execution of /test.cgi aborted due to compilation errors.


        Mfg: Harry

        1. Halihallo

          liegt daran dass das was die() ausgibt nie im brower ankommt.

          Nein. Mit CGI::Carp eben schon. Jedoch kann dieses Modul "Compilierungsfehler" nicht abfangen/ausgeben.

          Tipp:
          Lass das Script mal auf der KdoZeile laufen und schau auch mal ins error_log.

          Das error_log gibt's beim Apache, bei Perl auf KdoZeile wird der Fehler auf'm Bildschirm sichtbar ;-)

          Viele Grüsse

          Philipp