speedy: Perlskript mag nicht so recht auf einem Cobalt-RaQ Server

Hi Forumers,

ich habe ein CGI-Skript, welches auf meinem lokalen PC problemlos funzt (Win95, Apache, IE5). Nach korrektem hochladen auf den entfernten Webserver laeuft das Skript nur noch teilweise. Bei bestimmten Funktionen wird ein Internal-Server-Error produziert. Das Logfile gibt folgendes her:

[Tue Jul  4 07:16:46 2000] [error] [client 62.104.219.68] malformed header
from script. Bad header=Died at /home/sites/site23/web: /usr/cgiwrap/cgiwrap

Das halte ich fuer eine ziemlich merkwuerdige Meldung. Es handelt sich um einen Cobalt-RaQ Server mit Apache auf Linux und diesem komischen CGIwrapper (ich hab keine Ahnung, was das sein soll). Leider kann mir mein Provider auch nicht weiterhelfen, weshalb ich hier mal poste.

Fuer jede Hilfe dankbar,
speedy

  1. Hallo Speedy!

    Fuer jede Hilfe dankbar,

    Vielleicht helfen dir ja die Antworten auf http://www.teamone.de/selfaktuell/forum/messages/82043.html.

    bis nextens
    xitnalta (welcher erst jetzt merkt, dass er die (zeitweise gültige) Flatrate bereits benutzt hat (-8 )

    1. Hi xitnalta,

      Vielleicht helfen dir ja die Antworten auf http://www.teamone.de/selfaktuell/forum/messages/82043.html.

      das hilft mir leider nicht viel weiter. Aber eins hab ich noch nicht gecheckt:

      "setze die Rechte fuer alle Dateien, in denen etwas geschrieben wird auf 666, das script selber auf 755, evtl Verzeichnisse mit a+w chmodden."

      was meint Hunold mit "a+w"?

      Viele Gruesse
        speedy

      1. Hallo,
        normalerweise chmoddest Du ja mit Zahlen, da kann leicht etwas daneben gehen, besonders bei Verzeichnissen. Wenn Du aber mit a+w chmoddest, passiert nix (a=access, w=write, das ganze öffentlich). Ist manchmal ganz hilfreich, wenn über Verzeichnisse hinweg ein Script arbeitet und Daten ablegen will.

        Alles Klar?
        Hunold

        1. Hi,

          Alles Klar?
          Hunold

          Jo, alles klar! Vielen Dank!

          speedy

  2. Moin Forum,

    Und noch eine Frage wegen des Servers:
    kann es sein, dass der Apache so eingestellt ist, dass er bei den Perl-Befehlen "die;" und "print STDERR $meldung;" einen "internal server error" erzeugt? Ich habe diese Befehle aus meinem Skript verbannt und nun laeuft es auch online wunderbar!

    Vielen Dank fuer jede Hilfe
    speedy

    1. Tag Speedy!

      kann es sein, dass der Apache so eingestellt ist, dass er bei den Perl-Befehlen "die;" und "print STDERR $meldung;" einen "internal server error" erzeugt?

      Nein. Der Error kommt wahrscheinlich, weil Du Dein Script abbrichst, *bevor* Du die CGI-Header (meist "Content-type: text/html\n\n") auf STDOUT geschrieben hast. Falls dem so ist, wird im Error log soetwas wie "premature end of script headers" stehen. Und direkt davor wirst Du alles finden, was Dein Script auf STDERR geschrieben hat. Da die meisten die()s passieren, bevor Du die Header ausgegeben hast, sieht es so aus, wie wenn das die() direkt dafuer verantwortlich ist.

      So long

      1. Hi Calocybe,

        Nein. Der Error kommt wahrscheinlich, weil Du Dein Script abbrichst, *bevor* Du die CGI-Header (meist "Content-type: text/html\n\n") auf STDOUT geschrieben hast. Falls dem so ist, wird im Error log soetwas wie "premature end of script headers" stehen. Und direkt davor wirst Du alles finden, was Dein Script auf STDERR geschrieben hat. Da die meisten die()s passieren, bevor Du die Header ausgegeben hast, sieht es so aus, wie wenn das die() direkt dafuer verantwortlich ist.

        Es ist so: Das Skript funzt auf meinem lokalen System einwandfrei! Das heist es gibt alles korrekt aus und das errorlog bleibt leer. Soweit so gut. Auf dem Remoteserver kommt es dann zu einem "internal server error" wenn ich "die" oder "print STDERR" verwende. Dann steht im errorlog "bad header=" und danach die Meldung die auf STDERR ausgegeben werden sollte (z.B. "died at"). Ich denke deshalb, dass der entfernte Apache so eingestellt ist, dass der die Skriptverarbeitung abbricht, wenn STDERR beschrieben wird. Ist das moeglich?

        Viele Gruesse
        speedy

        1. Hallo speedy!

          "premature end of script headers"

          und

          "bad header="

          bedeutet IMHO dasselbe.

          Also mal ganz grundlegend: im Internet ist fast alles headerbasiert. Ein CGI-Script muss deshalb immer einen (zumindest partiellen) Header wie "Content-type: text/plain" oder "Content-type: text/html" ausgeben. Ein solcher Header wird durch eine Leerzeile abgeschlossen (darum meist "Content-type: text/html\n\n").

          Zumindest die mime-Angabe ist für den Server dringend erforderlich. Falls es die nicht gibt, kommt es eben zu einem internen Server-Fehler. (Und die "bad header="-Angabe zeigt dir einfach, was der Server als Header zu interpretieren versucht hat.)

          Ich hoffe, ich konnte dir zu mehr Unklarheit verhelfen :o).

          bis nextens
          xitnalta

          1. Hi,

            Zumindest die mime-Angabe ist für den Server dringend erforderlich. Falls es die nicht gibt, kommt es eben zu einem internen Server-Fehler. (Und die "bad header="-Angabe zeigt dir einfach, was der Server als Header zu interpretieren versucht hat.)

            Jo, so in etwa seh ich das auch schon: Aber das Problem liegt darin, dass ich einen HTML-Header gefolgt von ein paar HTML-Anweisungen ausgebe und danach ein "die;" anweise. Nun kommt es (nur auf dem entfernten Server - lokal keine Probleme!) zu einem "Bad header=died at...". Das wuerde ja bedeuten, dass mein HTML-Header ignoriert wurde, und die "die;"-Anweisung ihre Meldung auf STDOUT ausgeben wollte (und das nat. ohne Header).

            Meine Frage war ja, ob es beim Webserver Einstellungen gibt, die diese Meldungen irgendwie umleiten und einen Internal Server Error erzeugen (s. vorh. Threads).

            Ich hoffe, ich konnte dir zu mehr Unklarheit verhelfen :o).

            Ei freilich!

            Viele Gruesse
              speedy

            1. Hallo nochmal.

              Jo, so in etwa seh ich das auch schon: Aber das Problem liegt darin, dass ich einen HTML-Header gefolgt von ein paar HTML-Anweisungen ausgebe und danach ein "die;" anweise. Nun kommt es (nur auf dem entfernten Server - lokal keine Probleme!) zu einem "Bad header=died at...".

              Es ist auch möglich, dass für die Ausgabe auf STDERR auf dem entfernten Server ebenfalls separat ein Header angegeben werden muss.

              bis nextens
              xitnalta

            2. Re-Hi!

              Meine Frage war ja, ob es beim Webserver Einstellungen gibt, die diese Meldungen irgendwie umleiten und einen Internal Server Error erzeugen (s. vorh. Threads).

              Mmh.. vielleicht haengt das mit diesem CGI-Wrapper zusammen. Wenn der STDOUT und STDERR auffaengt, und dann STDERR zuerst an den Webserver weitergibt... aber wieso sollte er das tun, ist doch voellig sinnlos?

              Was sagt denn Dein Provider zu dem Thema?

              So long