t0bias: CGI: Premature end of script headers

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

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

    erst hier darf der Inhalt ausgegeben werden

    Hättest du mit Google übrigens schnell gefunden: "premature end of script headers"

    Viele Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
    1. Nein, das ist nicht das Problem, auch ganz einfache Funktionen funktionieren nicht, so kann ich z.B. nichteinmal eine variable
      definieren.

      Danke trotzdem,

      Gruss

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

        --
        Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
        <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
        1. 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

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

            --
            Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
            <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
      2. 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.

        --
        Javascript ist toll (Perl auch!)
  2. 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

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

      --
      Ich bin strenggenommen auch nur interessierter Laie. (molily)
      Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
      1. 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

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

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

          --
          Ich bin strenggenommen auch nur interessierter Laie. (molily)
          Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
  3. 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

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
  4. 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

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
    1. 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

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

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
        Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.