Tom: Premature End of Script...

Hallo,

nachdem die das Archiv durchsucht habe und trotzdem keine der angebotenen Lösungen mein Problem beseitigt, muß ich nun doch posten.

Ich bekomme beim Ausführen eines Perl-Scripts aus dem Browser (Apache 1.3.12, SuSE 6.4) den bekannten "Premature End of Script Error".

  • die Files habe ich in ASCII übertragen (sollte das Problem mit dem Zeilenumbruch von Windows<->Unix ausschließen)
  • die Verzeichnis- und Dateirechte passen auch (ein anderes Script im gleichen Verzeichnis funktioniert)
  • "perl -c <scriptname>" meldet "syntax OK".
  • "perl <scriptname>" aführt das Script korrekt aus (nur eben nicht im Browser)

Unter Windows funktionieren die Scripts ebenfalls.
Den Pfad habe ich auf #!/usr/bin/perl angepasst.

Wo könnte der Fehler noch liegen???
Bin für jeden noch so kleinen Hinweis dankbar.

Tom

  1. Wo könnte der Fehler noch liegen???
    Bin für jeden noch so kleinen Hinweis dankbar.

    Vielleicht mangelnde Berechtigungen. Was steht denn im Error-Log?

    Peter

    1. Wo könnte der Fehler noch liegen???
      Bin für jeden noch so kleinen Hinweis dankbar.

      Vielleicht mangelnde Berechtigungen. Was steht denn im Error-Log?

      Peter

      Im error_log steht:
      No such File or directory: exec of /usr/local/httpd/cgi-bin/test.pl failed
      Premature end of script headers: /usr/local/httpd/cgi-bin/test.pl

      Ein anderes Script im gleichen Verzeichnis mit den gleichen Rechten funktioniert auch.

      Achso, im Script die Zeile print "Content-type: text/html\n": habe ich auch.

      Tom

      1. Wo könnte der Fehler noch liegen???
        Bin für jeden noch so kleinen Hinweis dankbar.

        Vielleicht mangelnde Berechtigungen. Was steht denn im Error-Log?

        Peter

        Im error_log steht:
        No such File or directory: exec of /usr/local/httpd/cgi-bin/test.pl failed
        Premature end of script headers: /usr/local/httpd/cgi-bin/test.pl

        Ein anderes Script im gleichen Verzeichnis mit den gleichen Rechten funktioniert auch.

        Achso, im Script die Zeile print "Content-type: text/html\n": habe ich auch.                                         ----------

        Vielleicht nur ein Kopie fehler aber hast du \n\n oder wie oben \n\ stehn ?

        Fisch

        1. Wo könnte der Fehler noch liegen???
          Bin für jeden noch so kleinen Hinweis dankbar.

          Vielleicht mangelnde Berechtigungen. Was steht denn im Error-Log?

          Vielleicht nur ein Kopie fehler aber hast du \n\n oder wie oben \n\ stehn ?

          Fisch

          Ja, Cut+Paste-Fehler. Ist im Original Script ok.

          Tom

      2. Hi,

        No such File or directory: exec of /usr/local/httpd/cgi-bin/test.pl failed

        klingt, als wäre
        Den Pfad habe ich auf #!/usr/bin/perl angepasst.
        falsch gewesen.

        Cheatah

        1. Hi,

          No such File or directory: exec of /usr/local/httpd/cgi-bin/test.pl failed

          klingt, als wäre
          Den Pfad habe ich auf #!/usr/bin/perl angepasst.
          falsch gewesen.

          Cheatah

          Aber das ist doch der richtige Pfad. Und ein zweites Script im gleichen Verzeichnis funktioniert mit der gleichen ersten Zeile ebenfalls.

          <a href="/cgi-bin/test.pl">Test 1</a>     -> klappt nicht
          <a href="/cgi-bin/test2.pl">Test 2</a>   -> klappt

          Die beiden ersten Zeilen der Scripts sind identisch
          #!/usr/bin/perl
          print "Content-type: text/html\n\n"

          Tom (der langsam verzwefelt)

          1. Hi,

            Die beiden ersten Zeilen der Scripts sind identisch
            #!/usr/bin/perl
            print "Content-type: text/html\n\n"

            Ich meine mich erinnern zu können hier einmal gelesen zu haben, daß man nach der Shebang-Zeile (#!)
            eine Leerzeile stehen lassen sollte. Kannst du ja mal probieren. (würde allerdings nicht erklären, wieso das eine
            geht und das andere nicht.)

            Gruß,
            Tobias

            1. Hi,

              Die beiden ersten Zeilen der Scripts sind identisch
              #!/usr/bin/perl
              print "Content-type: text/html\n\n"

              Ich meine mich erinnern zu können hier einmal gelesen zu haben, daß man nach der Shebang-Zeile (#!)
              eine Leerzeile stehen lassen sollte. Kannst du ja mal probieren. (würde allerdings nicht erklären, wieso das eine
              geht und das andere nicht.)

              Gruß,
              Tobias

              Danke für den Tip, hat aber leider auch nix gebracht....      :(

              Tom

          2. Hi,

            Den Pfad habe ich auf #!/usr/bin/perl angepasst.
            falsch gewesen.

            Aber das ist doch der richtige Pfad.

            blöde Idee, die aber nicht zum ersten Mal klappen würde: Lösch die Zeile und schreib sie von Hand noch mal neu!

            Und ein zweites Script im gleichen Verzeichnis funktioniert mit der gleichen ersten Zeile ebenfalls.

            Inwieweit unterscheiden sich die beiden Scripts anschließend? Was wird in dem einen eingebunden, was im anderen fehlt? Und was sagt das Script, wenn Du es auf dem Zielsystem mit

            ./script.pl

            ausführst?

            Cheatah

            1. blöde Idee, die aber nicht zum ersten Mal klappen würde: Lösch die Zeile und schreib sie von Hand noch mal neu!

              bringt leider auch nix

              Inwieweit unterscheiden sich die beiden Scripts anschließend? Was wird in dem einen eingebunden, was im anderen fehlt? Und was sagt das Script, wenn Du es auf dem Zielsystem mit

              1. Script das micht funktioniert:
              Das eine Script liest eine komplette Html-Datei ein, verändert einige Inhalte der gelesenen Datei und gibt die veränderte Datei im Browser aus.

              2. Script das funktioniert:
              Hallo Welt-Script      :)

              Und was sagt das Script wenn Du es auf dem Zielsystem mit ./script.pl ausführst?

              Das ist eine gute Frage. Da bekomme ich nämliche die Fehlermeldung das die Datei nicht gefunden wurde.

              Kann das dann an den zu öffnenden Dateien im Script liegen?? Aber warum dann der "premature end of script headers"??
              <versteht gar nix mehr>

              Tom

              1. Wo steht die HTML-Datei? Ist die readable fuer das Skript?????
                Setz mal alles auf chmod 777 - nur zum testen.

                Schreibe Logmeldungen in eine error-Datei, nur um zu sehen, wie weit Dein Skript ueberhaupt kommt.

                Gruss Christoph

              2. Hi,

                Das eine Script liest eine komplette Html-Datei ein,

                open(...) or die "Kann Datei xyz nicht oeffnen: $!";

                Anschließend steht im Errorlog mehr.

                Kann das dann an den zu öffnenden Dateien im Script liegen??

                Ja, vermutlich.

                Aber warum dann der "premature end of script headers"??

                Es wird erst die Fehlerausgabe an den Server geschickt, dann die eigentliche Scriptausgabe. Also kommt ein falscher HTTP-Header zuerst - premature end of script headers.

                Cheatah

  2. Hallo,

    Einfach ein Verdacht:
    Mach am Ende der Datei eine zusätzliche Leerzeile.

    Und schau nach ob sich nicht irgendwo doch noch ein sonderzeichen eingeschlichen hat, welches den Fehler verursacht.

    'vi' ist da nicht immer die waffe, weil der sagt Dir oft zwar, daß es sich um eine DOS-Datei handelt, zeigt aber keine '^M' an.

    probiers mit 'cat'.

    Sch... ASCII-Konvertierungen.

    Grüße
       Klaus

  3. Hallo Tom,

    poste doch einfach mal das Skript, das wuerde die Loesungsfindung erheblich erleichtern.

    Gruss
      Kai