Premature end of script headers
Marcel
- cgi
Hallo!!
Ich hab da ein Problem mit einem cgi upload-script!
MANCHMAL bekomme ich die Fehlermeldung Premature end of script headers zurück. Beim zweiten starten des scripts wirds dann ausgeführt.
#!perl -w
use strict;
use CGI; # Modul fuer CGI-Programme
my $cgi = new CGI; # neues Objekt erstellen
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Upload Feedback</title></head><body>\n";
my $file = $cgi->param("myfile");
my $wasfach = $cgi->param("fach");
my $kommentar = $cgi->param("beschreibung");
my @Datei = split(/\/ ,$file); #letztes Element des Arrays ist Dateiname
my $Dateiname = $Datei[$#Datei]; #ermittelt letztes element
#größe der Datei ermitteln
my $Dateisize = -s $file;
$Dateisize /= 1000; #Datei jetzt in kByte
if ($Dateisize > 2000) #wenn Datei größer 2MByte
{
print "<p>Datei ist zu groß, höchstens 2 MByte</p>\n";
print "</body></html>\n";
die; # ABBRECHEN!!!
}
chdir("../$wasfach");
my $fname = $Dateiname;
open DAT,'>'.$fname or die 'Error processing file: ',$!;
binmode $file;
my $data;
while(read $file,$data,1024) {
print DAT $data;
}
close DAT;
print "<p>Datei $file wurde erfolgreich übertragen</p>\n";
print "</body></html>\n";
Wenn ich das script Lokal auf meinem Rechner starte funktioniert es immer!
Wenn jemand eine Idee hat, wäre ich ziemlich froh :-))
Ok, MfG
Marcel
hi,
es "klemmt" bereits hier:
#!perl -w
Aber da müßte dir eigentlich eine andere Fehlermeldung geliefert werden - es sei denn, du läßt das Script über einen Apache auf WINDOWS (und mit der entsprechenden Eintragung in der httpd.conf) oder über den IIS laufen.
Was steht denn in den logs noch so drin?
Christoph S.
Hoi,
es "klemmt" bereits hier:
#!perl -w
Iwo. Wenn die Perl-Binary im Path liegt (und das ist /usr/bin bei den
meisten Usern), dann geht das auch so.
Gruesse,
CK
Hallo!
Danke schonmal für die Zahlreichen Antworten!
Leider habe ich keinen zugriff auf die error.log´s bei meinem Anbieter (kontent) und da das script bei mir zu Hause lokal funktioniert kann ich nicht sagen, was da so steht :-)
Habt ihr vielleicht ne Ahnung wie ich dann genauere Infos über den Fehler bekommen kann ?
MfG
Marcel Sicking
Hi,
MANCHMAL bekomme ich die Fehlermeldung Premature
end of script headers zurück. Beim zweiten starten
des scripts wirds dann ausgeführt.
Anscheinend gibt irgendwas innerhalb Deines Skripts manchmal eine Fehlermeldung nach stdout aus - und zwar
_bevor_ Du Deinen HTTP-Header ausgegeben hast.
Das Ergebnis ist dann ein HTTP-Header mit kaputtem Inhalt, welcher diese Meldung im Server verursacht.
Die Fehlermeldung Deines Skripts kannst Du in Deinem
error_log nachlesen. (Du hast doch ein error_log? Du
wirst doch nicht etwa im Blindflug CGI-Skripte entwickeln? ;-)
print "Content-type: text/html\n\n";
Vor dieser Meldung kann eigentlich nicht viel schief
gehen - "use CGI" sollte ja wohl funktionieren.
Aber alles Raten nützt wenig - schau in Dein Log.
Dazu ist es da.
Viele Grüße
Michael
Halihallo
MANCHMAL bekomme ich die Fehlermeldung Premature
end of script headers zurück. Beim zweiten starten
des scripts wirds dann ausgeführt.
Anscheinend gibt irgendwas innerhalb Deines Skripts manchmal eine Fehlermeldung nach stdout aus - und zwar
_bevor_ Du Deinen HTTP-Header ausgegeben hast.
Das Ergebnis ist dann ein HTTP-Header mit kaputtem Inhalt, welcher diese Meldung im Server verursacht.
Die Fehlermeldung Deines Skripts kannst Du in Deinem
error_log nachlesen. (Du hast doch ein error_log? Du
wirst doch nicht etwa im Blindflug CGI-Skripte entwickeln? ;-)
Ich bin mal so "frech" und sage, dass es sich sogar _nur_ um diesen Fehler handeln kann. Veraten tut mir das MANCHMAL aus dem Ausgangsposting.
Einfach mal
autoflush(STDOUT); autoflush(STDERR);
an den Anfang des Scriptes hängen und schon wird man schlauer...
Der Fehler ist damit zwar nicht behoben, aber die Page sollte wenigstens Dargestellt werden.
Ich nehme an, dass dir -w irgendwelche Fehler gibt. Folgendes hab ich beim überfliegen des Sources festgestellt:
my $Dateiname = $Datei[$#Datei]; #ermittelt letztes element
das letzte Element hat den Index (scalar(@Datei)-1), nicht $#Datei.
$Dateisize /= 1000; #Datei jetzt in kByte
if ($Dateisize > 2000) #wenn Datei größer 2MByte
btw: Ein Megabyte hat 1024 KByte und ein KByte hat 1024 Bytes...
Viele Grüsse
Philipp
Hallo Philipp,
Ich nehme an, dass dir -w irgendwelche Fehler gibt. Folgendes hab
ich beim überfliegen des Sources festgestellt:
my $Dateiname = $Datei[$#Datei]; #ermittelt letztes element
das letzte Element hat den Index (scalar(@Datei)-1), nicht $#Datei.
Du haettest 'perldoc perldata' aufmerksamer lesen sollen. $#array
bezeichnet den Index des letzten Elements und ist -1, wenn der Array
leer ist.
Gruesse,
CK
Halihallo Christian
das letzte Element hat den Index (scalar(@Datei)-1), nicht $#Datei.
Du haettest 'perldoc perldata' aufmerksamer lesen sollen. $#array
bezeichnet den Index des letzten Elements und ist -1, wenn der Array
leer ist.
Ay caramba. Hast recht. Ich entschuldige mich für die Fehlinformation.
Viele Grüsse und Danke
Philipp