CGI: Premature end of script headers
t0bias
- webserver
0 Marian0 t0bias0 Marian0 agapanthus0 Marian
0 Struppi
0 Jasmin- perl
0 Mathias Brodala0 Siechfred
hallo
habe einen apache-server auf linux aufgesetzt.
der apache-server reagiert und funktioniert, aber
wenn ich perl-scripts im cgi-bin ausführen will erhalte ich
einen
500 Internal Server Error
im Logfile steht dann:
Premature end of script headers: test.pl
auf der Konsole funktioniert das script,
perl -wc test.pl
gibt
synthax ok
zurück.
das file ist unter linux mit vim erstellt, kann also keine
dos-zeilenumbrüche enthalten und die berechtigungen sind
auf 755 gesetzt. eigentümer und gruppe des files ist beides-
mal apache.
wer weiss rat?
gruss
tobi
Hallo t0bias,
wenn ich perl-scripts im cgi-bin ausführen will erhalte ich
Premature end of script headers: test.pl
Wenn du [Perl über] CGI benutzt, muss das Script auch die Header ausgeben:
print "Content-Type: text/plain\n\n"
Hättest du mit Google übrigens schnell gefunden: "premature end of script headers"
Viele Grüße aus Freiburg,
Marian
Nein, das ist nicht das Problem, auch ganz einfache Funktionen funktionieren nicht, so kann ich z.B. nichteinmal eine variable
definieren.
Danke trotzdem,
Gruss
Hallo t0bias,
Nein, das ist nicht das Problem, auch ganz einfache Funktionen funktionieren nicht, so kann ich z.B. nichteinmal eine variable definieren.
Hast du es mal probiert?
Ja: Poste mal den Code.
Nein: Egal, wenn keine Header ausgegeben werden, wird das ganze Script nicht ausgeführt.
Viele Grüße aus Freiburg,
Marian
Moin.
Nein: Egal, wenn keine Header ausgegeben werden, wird das ganze Script nicht ausgeführt.
Nein. Das würde ja heißen, daß der Header als erstes auszugeben ist. Das Script wird, wenn es syntaktisch in Ordnung ist, ausgeführt, auch wenn kein Header ausgegeben wird.
Gruß Frank
Hallo agapanthus,
Nein: Egal, wenn keine Header ausgegeben werden, wird das ganze Script nicht ausgeführt.
Nein. Das würde ja heißen, daß der Header als erstes auszugeben ist. Das Script wird, wenn es syntaktisch in Ordnung ist, ausgeführt, auch wenn kein Header ausgegeben wird.
Ich meine es gibt nichts aus. Ich glaube nur, dass er ein Script hat, sagen wir mal
#! /usr/bin/perl
print "test";
was in der Konsole wunderbar funktioniert, aber über CGI nicht, und er mit der Begründung, das test werde ja auch nicht ausgegeben, meint, es liegt nicht am fehlenden Header.
Viele Grüße aus Freiburg,
Marian
Nein, das ist nicht das Problem, auch ganz einfache Funktionen funktionieren nicht, so kann ich z.B. nichteinmal eine variable
definieren.
aha, aber die Syntax ist ok?
Was du erzählst stimmt doch hinten und vorne nicht.
Du willst dir offensichtlich nicht helfen lassen, sonst würdest ein bisschen mithelfen das andere DEIN Problem verstehen.
Struppi.
Hallo t0bias,
wenn ich perl-scripts im cgi-bin ausführen will erhalte ich einen 500 Internal Server Error
im Logfile steht dann:
Premature end of script headers: test.pl
auf der Konsole funktioniert das script,
Diesen Fehler hatte ich auch schon.
Hast du deine Datei als Unicode kodiert? Vielleicht mit BOM?
BOM gibt am Anfang der Datei Auskunft über deren Kodierung. Damit findet der Perl Interpreter jedoch den Shebang nicht mehr in der ersten Zeile. Für Perl brauchst du kein BOM. Ich benutze Komodo, aber auch in VIM müsstest du BOM abschalten könnne.
Für weitere Informationen über Unicode in Perl siehe
Grüße
Jasmin
Hast du deine Datei als Unicode kodiert? Vielleicht mit BOM?
Das dürfte hier eigentlich nicht relevant sein, da das Script auf der Konsole ja ausgeführt wird.
Siechfred
Hallo liebe Sichfried,
Das dürfte hier eigentlich nicht relevant sein, da das Script auf der Konsole ja ausgeführt wird.
Hast du das mal ausprobiert? Ich hatte vor einiger Zeit den gleichen Fehler und konnte ihn eben reproduzieren. Auf der Konsole funktioniert es in jedem Falle fehlerlos, es wird genau das ausgegeben was man erwartet. In einer CGI-Umgebung jedoch kommt 500, im ErrorLog erscheint "Premature end of script headers". Erst durch das Abschalten von BOM und erneutem speichern funktioniert es.
Grüße
Jasmin
Hallo Sichfried,
Hallo liebe Sichfried,
Das war nicht absichtlich, ich habe nur bei meiner Standartanrede "Hallo liebe Forumsgemeinde," einfach "Forumsgemeinde" durch "Sichfried" ersetzt ;). *sorry*
Grüße
Jasmin
Das dürfte hier eigentlich nicht relevant sein, da das Script auf der Konsole ja ausgeführt wird.
Hast du das mal ausprobiert?
Ja, es gab eine Fehlermeldung auf der Konsole, aber frag' mich nicht mehr, welche :) Unsere unterschiedlichen Beobachtungen könnten eventuell darauf zurück zu führen sein, dass meine Testumgebung unter Windows XP läuft.
Siechfred
Hallo t0bias.
habe einen apache-server auf linux aufgesetzt.
der apache-server reagiert und funktioniert, aber
wenn ich perl-scripts im cgi-bin ausführen will erhalte ich
einen
500 Internal Server Error
im Logfile steht dann:
Premature end of script headers: test.pl
auf der Konsole funktioniert das script,
perl -wc test.pl
gibt
synthax ok
zurück.
Was noch nichts zu bedeuten hat. Entspricht die Ausgabe auf der Konsole auch *exakt* der erwarteten?
Einen schönen Donnerstag noch.
Gruß, Mathias
Premature end of script headers: test.pl
Das Script sendet im CGI-Kontext keinen gültigen Header (siehe u.a. Apache-FAQ).
auf der Konsole funktioniert das script,
perl -wc test.pl
gibt
synthax ok
zurück.
Das bestätigt die Annahme, dass kein Header gesendet wird, sonst stünde in der Konsole vor der Meldung sowas wie "Content-type: text/plain".
Siechfred
Moin.
perl -wc test.pl
Das bestätigt die Annahme, dass kein Header gesendet wird, sonst stünde in der Konsole vor der Meldung sowas wie "Content-type: text/plain".
Nicht wenn Perl auf der Konsole wie oben angegeben mit -c aufgerufen wird. Stellt sich die Frage, ob t0bias durch eine Copy&Paste-fehler das -c auch in der SheBang drin hat. Oder fehlt die Zeile sogar ganz?
Gruß Frank
Nicht wenn Perl auf der Konsole wie oben angegeben mit -c aufgerufen wird.
Ja, nicht richtig hingesehen resp. durch den Schreibfehler bei "Syntax" fehlleiten lassen.
Stellt sich die Frage, ob t0bias durch eine Copy&Paste-fehler das -c auch in der SheBang drin hat. Oder fehlt die Zeile sogar ganz?
Hätte er das '-c' in der shebang drin, würde das Script immer mit einem Internal Server Error sterben, auch wenn es ohne diesen Schalter im CGI-Kontext problemlos ausgeführt werden würde. Zusätzlich stünde aber im Errorlog 'syntax ok'. Wenn die shebang völlig fehlte, gäbe es im Errorlog unmittelbar vor der genannten Fehlermeldung die Einträge "failed to open log file" und "fopen: Permission denied".
Also entweder enthält uns der OP Informationen vor oder es liegt tatsächlich am fehlenden HTTP-Header. Oder es ist was völlig anderes ...
Siechfred