Fehler in Programm
Harald
- cgi
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
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
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
Halihallo
- Danke für die Antwort
bitte ;)
- 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
hi,
»» Hallo Philipp,
- Danke für die Antwort
- 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
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