Gerd Schneider: Providerwechsel und jetzt Premature end of script headers??

Guten Tag Forum,
hallo Self-html,

erst einmal ein Kompliment für dieses Klasseforum,
ich bin neu hier und über eine Heft-CD auf dieses
Forum gekommen. :-)

Ich habe seit Tagen und Nächten ein grosses Problem
mit der CGI und der dazugehörigen Fehlermeldung und
würde mich sehr freuen, wenn mich da bitte mal jemand
aufklären könnte.

"Premature end of script headers" - das Stichwort. :-(

Also, vorher gingen die diversen CGI wunderbar, jetzt
hab ich den Provider gewechselt. Das heisst natürlich,
dass die *.pl-Dateien entsprechend auf meinem Server
beim neuen Provider angepasst werden müssen. Der neue
Provider hat sein Apache eben anders installiert,
soweit gut kein Problem und der Provider teilte mir
aufgrund meiner Rückfrage folgendes mit:

#!/usr/bin/perl
/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/

Ich habe das korrekt uebertragen:

dateiname.pl
-------------------------------
#!/usr/bin/perl -w
.
..
$basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";
..
.
-------------------------------

Und trotzdem geht das Teil dateiname.pl nicht, obwohl
eben alles so angepasst ist. Auch CHMOD stimmt soweit
alles. Es kommt folgende Fehlermeldung beim Anlicken
von dem Button Absenden:

-------------------------------
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was
unable to complete your request.

Please contact the server administrator,...

-------------------------------

Im error.log steht dann folgendes:

-------------------------------
[Sat Sep  8 01:46:39 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.xyz/cgi-bin/blafaseldirthema/dateiname.pl
-------------------------------

CHMOD stimmen, HTML stimmt, nur immer wieder diese
"Premature end of script headers"-Fehlermeldung. Hilfe! ;-(

Hat jemand bitte einen Rat oder Vorschlag für
mich, was ich tun soll und woher diese Fehlermeldung
herkommt? Ich habe doch bloss den Provider gewechsel
und CGI ist nach wie vor aktiviert. Auch mit *.cgi
umbenennen (und Anpassen) habe ich es probiert,
"Premature end of script headers"-Fehler. :-(((

Danke!

Tchau
Gerd

  1. Hi,

    $basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";

    eine Variablenzuweisung erzeugt noch keinen Fehler. Wo wird dies verwendet, was wird _dort_ für ein Fehler zurückgegeben?

    Übrigens: Herzlichen Glückwunsch zur Verwendung von perl -w. Hättest Du das Script damit mal testweise an der Kommandozeile ausgeführt, hättest Du bei der Zuweisung von $basedir ohne "my" eine Warnung bekommen. Vielleicht ist diese ja schon Dein Fehler?

    Ansonsten:

    use CGI::Carp 'fatalsToBrowser';

    direkt nach der Shebang-Zeile. Vermutlich werden irgendwo anders noch Systemkommandos o.ä. aufgerufen, oder irgendeine Rechte- oder User-Verteilung stimmt nicht.

    Cheatah

    1. Hi Cheatah,

      danke für Deine rasche Antwort, ist ja klasse hier! :-)

      $basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";

      eine Variablenzuweisung erzeugt noch keinen Fehler. Wo wird dies verwendet,

      Eines für das Gästebuch, eines für Feedback, eines für
      Forum, eines für Anfragungen, usw., ganz normale
      Formulare zum Ausfüllen und Absenden; und all das Zeugs
      ging auch wunderbar. Seitdem ich beim neuen Provider
      bin, geht das eben nicht mehr. Habe all diese .pl-Teile
      auch schon auf anderen Apaches ausprobiert, klappt
      einwandfrei, nur hier auf diesem neuen Server nicht.

      was wird _dort_ für ein Fehler zurückgegeben?

      Nach dem Absenden auf eines der vorhin genannten
      Formulare kommt eben immer nur das für den Surfer
      sichtbare:

      500 Internal Server Error

      Internal Server Error

      The server encountered an internal error or misconfiguration and was
      unable to complete your request.

      Please contact the server administrator, xxxxxx@XXX.net and inform
      them of the time the error occurred, and anything you might have done
      that may have caused the error.

      More information about this error may be available in the server error
      log.


      Apache/1.3.12 Ben-SSL/1.38 Server at www.XXX.net Port 80

      und nur für mich sichtbar per FTP der Zugang
      zum error.log und dort steht dann drin:

      ------------------
      [Sat Sep  9 05:03:56 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.yz/cgi-bin/blafaseldirthema/dateiname.pl
      ------------------

      ?? <verzweifel>

      Übrigens: Herzlichen Glückwunsch zur Verwendung von perl -w.

      ??

      Hättest Du das Script damit mal testweise an der Kommandozeile ausgeführt, hättest Du bei der Zuweisung von $basedir ohne "my" eine Warnung bekommen. Vielleicht ist diese ja schon Dein Fehler?

      Also gut, ich habe das jetzt gerade vorhin - so wie Du
      sagst - ohne dem -w gemacht:

      ------------------
      #!/usr/bin/perl
      ------------------

      Und es kommt immer noch der gleiche 500 Error-Mist mit
      LOG-File

      ------------------
      [Sat Sep  9 05:18:12 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.yz/cgi-bin/blafaseldirthema/dateiname.pl
      ------------------

      ?? Was nun?

      Ob
      #!/usr/bin/perl
      oder
      #!/usr/bin/perl -w

      machen beide gleiche Fehlermeldungen 500-ERROR, egal
      bei welchem .pl-Script, "Premature end of script headers" :-(

      Ansonsten:
      use CGI::Carp 'fatalsToBrowser';

      direkt nach der Shebang-Zeile.

      Gut, machen wir das auch wie Du sagst:

      ------------------
      #!/usr/bin/perl
      use CGI::Carp 'fatalsToBrowser';

      Define Variables

      $basedir = "/usr/local/apache/vhosts/meindomaine.xy/blafaseldirthema/";
      $baseurl = "http://www.meinedomaine.xy/blafaseldirthema";
      $cgi_url = "http://www.....
      ------------------

      Was passiert? Das gleiche immer noch mit:

      ------------------
      500 Internal Server Error

      Internal Server Error

      The server encountered an internal error or misconfiguration and was
      unable to complete your request.

      Please contact the server administrator,....

      ------------------

      und im LOG file wieder, bzw. immer noch auch hier mit
      diesem bloeden "Premature end of script headers". :-(

      Vermutlich werden irgendwo anders noch Systemkommandos o.ä. aufgerufen,....

      Woher soll ich das wissen? Das ist ein ganz normaler
      Apache mit CGI. Bei anderen Apaches auf anderen Hosts
      und beim früheren Provider ging das ja alles auch.
      Jetzt plötzlich nicht mehr. Das kann doch eigentlich
      gar nicht an mir liegen, oder?

      oder irgendeine Rechte- oder User-Verteilung stimmt nicht.

      Das habe ich auch anfangs gemeint, Provider sagt aber
      ganz normal, dass die CGI drauf ist und die

      #!/usr/bin/perl
      bleibt ganz normal (es gibt auch /usr/local/bin/perl
      bei anderen Hosts, wo das Teil nur so funzt)

      und die Variablen an den Server anzupassen sind und
      das wäre eben nur die Pfadanpassung wie schon gepostet
      mit dem neuen Pfad (wie vom Provider angegeben):

      ------------------

      Define Variables

      $basedir = "/usr/local/apache/vhosts/meindomaine.xy/blafaseldirthema/";
      ------------------

      Stelle Dir einfach vor, diese Scripte sind alle auch bei
      mehreren Providers auf mehreren verschiedenen Hosts
      wunderbar gelaufen, nur hier bei diesem "System" gehts nicht,
      obwohl CGI drauf ist und das auch bei einer manuellen
      URL-Eingabe einer http://www.meinedomaine.xy/blafaseldirthema/dateiname.pl
      reagiert, sonst gäbe es ja eine 404-Notfound Errormeldung und
      das tut der nicht, sondern macht brav 500 Servererror rein. :-(

      Was mache ich denn jetzt? Wie kann ich die "Rechte- oder
      Userverteilung" feststellen? CGI ist ja aktiviert.

      Vielleicht hilft Dir noch diese Info:

      Login per FTP:

      /cgi-bin
      /httpdocs
      /logs

      Wie man sieht, ist /cgi-bin praktisch hinter dem Server und
      dort befinden sich auch die Unterverzeichnisse und Dateiname.pl
      /cgi-bin/blafaseldirthema/dateiname.pl
      /httpdocs/blafaselthema/*.*

      HTML-Source FORM Action ist auch brav
      <FORM ACTION = "http://www.meindomaine.xy/cgi-bin/blafaseldirthema/dateiname.pl" METHOD = "POST">

      Hab mal vorhin auf die Schnelle das WWW-Board von Matt Wright
      ebenfalls reingeschmissen, auch der macht diesen 500 ERROR
      mit "Premature end of script headers". Kann doch nicht sein,
      dass ein solch einfaches WWW-Board bei Dir laeuft und bei mir
      macht das Teil 500 ERROR "Premature end of script headers"?

      Es wäre toll, wenn Du doch bitte etwas dazu sagen könntest, ich
      sitze jetzt auch schon wieder fast die ganze Nacht nur an diesem
      blöden CGI-Fehler "Premature end of script headers". ;-(

      Danke! :-)

      Tchau
      Gerd mit 18 grauen Haaren mehr...

      1. Hi,

        $basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";

        eine Variablenzuweisung erzeugt noch keinen Fehler. Wo wird dies verwendet,

        Eines für das Gästebuch, eines für [...]

        nein nein, das meine ich nicht. Wo _im Code_, also bei welchen Befehlen wird das verwendet?

        was wird _dort_ für ein Fehler zurückgegeben?

        Nach dem Absenden auf eines der vorhin genannten
        Formulare kommt eben immer nur das für den Surfer
        sichtbare:

        Auch das meine ich nicht. Der Fehler ist gewöhnlich im Browser nicht sicher - dafür aber im Error-Log. Zumindest wenn das Script brauchbar geschrieben ist und kritische Aktionen mit einem 'or die "Fehler bei xyz: $!";' abgeschlossen werden.

        More information about this error may be available in the server error
        log.

        Tja, eben :-)

        zum error.log und dort steht dann drin:


        [Sat Sep  9 05:03:56 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.yz/cgi-bin/blafaseldirthema/dateiname.pl

        Ergo ist das Script _nicht_ brauchbar geschrieben *seufz*

        Übrigens: Herzlichen Glückwunsch zur Verwendung von perl -w.

        ??

        Das machen viel zu wenige. In SelfHTML wird es leider auch nur am Rande erwähnt - gute Perl-Programmierer beginnen ihre Scripts aber _immer_ damit.

        Hättest Du das Script damit mal testweise an der Kommandozeile ausgeführt, hättest Du bei der Zuweisung von $basedir ohne "my" eine Warnung bekommen. Vielleicht ist diese ja schon Dein Fehler?

        Also gut, ich habe das jetzt gerade vorhin - so wie Du
        sagst - ohne dem -w gemacht:

        Ähm, da hast Du mich falsch verstanden, glaube ich :-) Mit -w erfährst Du eher, was im Script noch alles falsch ist.

        Und es kommt immer noch der gleiche 500 Error-Mist mit
        LOG-File

        Dann hast Du das Script nicht von der Kommandozeile aus gestartet (also per Telnet oder in einer DOS-Box).

        use CGI::Carp 'fatalsToBrowser';

        direkt nach der Shebang-Zeile.

        Gut, machen wir das auch wie Du sagst:

        #!/usr/bin/perl
        use CGI::Carp 'fatalsToBrowser';

        [...]

        500 Internal Server Error

        Dann ist was ziemlich an der Basis falsch. Hast Du das Script im ASCII-Modus hochgeladen? Rechte richtig gesetzt? Ist der Server passend konfiguriert? Perl an der richtigen Stelle (ich schätze ja, sonst wäre die Fehlermeldung eine andere)? Alle benötigten Module/Scripts/Kommandos richtig installiert?

        Internal Server Error

        Du brauchst die identische (nutzlose) Fehlermeldung übrigens nicht immer komplett auszuschreiben :-(

        Vermutlich werden irgendwo anders noch Systemkommandos o.ä. aufgerufen,....

        Woher soll ich das wissen?

        Im Script nachgucken, es startet sie ja schließlich, bzw. versucht es.

        Das ist ein ganz normaler
        Apache mit CGI. Bei anderen Apaches auf anderen Hosts
        und beim früheren Provider ging das ja alles auch.
        Jetzt plötzlich nicht mehr. Das kann doch eigentlich
        gar nicht an mir liegen, oder?

        Keine Ahnung. Hast Du Deinen Provider mal gefragt, was er dazu meint?

        #!/usr/bin/perl
        bleibt ganz normal (es gibt auch /usr/local/bin/perl
        bei anderen Hosts, wo das Teil nur so funzt)

        Stimmen die Perl-Versionen dort überein? Hast Du es mal mit /usr/local/bin/perl versucht?

        Was mache ich denn jetzt? Wie kann ich die "Rechte- oder
        Userverteilung" feststellen? CGI ist ja aktiviert.

        "CGI ist aktiviert" merkt man schon daran, daß ein ISE kommt :-) Das bringt aber nichts.

        Vielleicht hilft Dir noch diese Info:

        Nope, leider nicht.

        Hab mal vorhin auf die Schnelle das WWW-Board von Matt Wright
        ebenfalls reingeschmissen, auch der macht diesen 500 ERROR
        mit "Premature end of script headers". Kann doch nicht sein,
        dass ein solch einfaches WWW-Board bei Dir laeuft und bei mir
        macht das Teil 500 ERROR "Premature end of script headers"?

        Wie gesagt, offenbar ist etwas an der Basis falsch. Frag mal Deinen Provider etwas "kräftiger". Oder bring erst mal dieses Script zum Laufen:

        #!/usr/bin/perl -w
        print "Content-type: text/plain\n\n";
        print 'Läuft!';

        Prüfe die Scripts alle wie gesagt auch von der Kommandozeile aus (perl -c script.pl, perl script.pl, immer mit "-w" im Code).

        Cheatah

        1. Hallo Gerd!

          Das -w steht für Warnings, und gibt dir ebendiese aus, wenn du das script mit perl -w script.pl an der Kommandozeile compilierst. Ansonsten gibt es dir ja nur eine Meldung, wenn was falsch ist. Aber dann bricht es die Ausführung des Scripts ohnehin ab. Und mit -c schaust du, ob die Syntax korrekt ist - gegen Tippfehler und ähnliche lästige Fehlerquellen!

          Wenn du also c:...> perl -cw script.pl eingibst zeigt dir der Interpreter alle Warnings an, sagt ob die Syntax o.k. ist, und natürlich zeigts auch Fehler an ;-) -Recht nützlich !

          Was deinen Fehler angeht, du kannst das script ja mal hier posten, oder sagen wo man es sich online anschauen kann!

          Probier mal ein Leerzeichen zw. #! und /usr/bin/perl. Kann mir zwar nicht vorstellen dass es daran liegen sollte, aber wer weiss ??

          schöne Grüsse
          Bernhard

      2. hallo,

        weiss nicht obs dir hilft......

        aber hast du deinen ordner im CGI-BIN auch die richtigen rechte gegeben ???......das hat bei mir mal den gleichen fehler verursacht.......

        SoLong M.

        1. Hi Manuel,

          weiss nicht obs dir hilft......
          aber hast du deinen ordner im CGI-BIN auch die richtigen rechte gegeben ???......das hat bei mir mal den gleichen fehler verursacht.......

          Ja, natuerlich.

          Ordner/Verzeichnis auf CHMOD 777.
          Script auf CHMOD 777.

          Und trotzdem geht es (immer noch) nicht. ;-(((

          Tchau,
          Gerd