500 Internal Server Error

Von: , Frage gestellt am So, 4. Aug 2002

Hallo!

Ich habe auf meiner WebSite im Verzeichnis /cgi-bin ein ganz einfaches Uhrzeit-Perl-Script sowohl als uhr.pl als auch uhr.cgi gespeichert. Zugriffsrecht ist 755. Upload mit ASCII hat problemlos funktioniert.

Quellecode:

#!/usr/bin/perl
#
# Datum und Uhrzeit wird berechnet.
#
($sek,$min,$h,$mtag,$monat,$jahr) = localtime(time);

$jahr += 1900; # zu Jahr 1900 dazuzählen.
$monat += 1; # startet bei 0

#
# Ausgabe als HTML.
#

print <<"EOM";
Content-Type: text/html

<H1>1. CGI-Programm</H1>

<P>Hier war es gerade
$h Uhr $min und $sek Sekunden.

<P>Das Datum ist: $mtag.$monat.$jahr.


EOM

# und aus"

Sobald ich mit dem Internet Explorer direkt darauf zugreife (domain/cgi-bin/uhr.pl bzw ../uhr.cgi) erhalte ich die Fehlermeldung "500 Internal Server Error".

Wer kann mir meinen Fehler sagen? Kann ich mit dem Webbrowser vielleicht nicht direkt auf CGI's zugreifen? Wenn ja, wie macht man es dann?

Danke,

Constantin

3 Antworten zu dieser Frage

  1. Antwort von nach 4 Stunden 0 hilfreich
    Re: 500 Internal Server Error

    Hi Constantin,

    das Script ist formal korrekt.
    Füge mal als 2. Zeile ein:
    use CGI::Carp qw(fatalsToBrowser); # Fehler im Browser melden
    und schau mal ob du eine detailliertere Fehlermeldung bekommst.

    Auf manchen Servern gibts Probleme mit dem HTTP-Header (Content-type...), dann sollte es aber gehen, wenn man den Header vom CGI-Modul schreiben lässt.
    Hast du auch den korrekten Pfad im Browser eingetippt? Wenn Scripte nicht gefunden werden gibts i.d.R. auch 500 statt 404 Error...

    schönen Gruß
    Ingo

  2. Antwort von nach einem Tag 0 hilfreich
    Beheben eines 'Internal Server Error'

    Hallo Constantin! Ich habe auf meiner WebSite im Verzeichnis /cgi-bin ein ganz
    einfaches Uhrzeit-Perl-Script sowohl als uhr.pl als auch
    uhr.cgi gespeichert. Zugriffsrecht ist 755. Upload mit ASCII
    hat problemlos funktioniert.
    Sobald ich mit dem Internet Explorer direkt darauf zugreife
    (domain/cgi-bin/uhr.pl bzw ../uhr.cgi) erhalte ich die
    Fehlermeldung "500 Internal Server Error".

    Wer kann mir meinen Fehler sagen? Kann ich mit dem Webbrowser
    vielleicht nicht direkt auf CGI's zugreifen? Wenn ja, wie
    macht man es dann?
    Wenn der Perl-Code an sich, sowie die Dateirechte OK sind und
    dennoch ein Internal Server Error erscheint, liegt es meist
    daran, dass die erste Zeile des Perl-Skripts nicht in Ordnung
    ist, d.h. entweder der Pfad zum Perl-Interpreter ist falsch oder
    am Ende der Zeile steht ein für den Server falsch codiertes
    Newline. Dies entsteht z.B. bei der FTP-Übertragung im
    Binärmodus von einem Windows- auf einen Linuxrechner.

    Wenn Du Telnet-Zugang hast, kannst Du das Skript unter Linux
    in der Form ./uhr.pl aufrufen, um zu testen, ob die erste Zeile
    Deines Skripts korrekt ist.

    Im folgenden hab ich Deinem Skript ein paar Zeilen hinzugefügt,
    um es "fehlerresistenter" zu machen:

    #!/usr/bin/perl -w --
    # nützliche Kommandozeilenschalter:
    # -w = Warnungen ausgeben lassen
    # -- = alles was dahinter kommt ignorieren (z.B. "kaputte" 
    # Newline-Zeichen!)
    # Schutz vor Tippfehlern: Variablen müssen mit my deklariert 
    # werden
    use strict;
    # Fehlermeldungen im Browser anzeigen:
    # TIPP: wenn trotz use CGI::Carp ein Internal Server Error angezeigt wird,
    #       liegt der Fehler definitiv an den Zeilen davor, meist ist der Pfad
    #       zum Perl-Interpreter falsch bzw. enthält für den Server ungültige 
    #       Newlines
    use CGI::Carp "fatalsToBrowser";
    # print-Anweisungen sofort (ohne Zwischenspeichern) ausgeben 
    # lassen, damit der HTTP-Header unverzüglich zurückgesendet wird:
    $|=1;
    #
    # Datum und Uhrzeit wird berechnet.
    #
    my ($sek,$min,$h,$mtag,$monat,$jahr) = localtime(time);
    $jahr += 1900; # zu Jahr 1900 dazuzählen.
    $monat += 1; # startet bei 0
    #
    # Ausgabe als HTML.
    #
    # ACHTUNG bei Hier-Dokumenten: 
    # das EOM am Ende muss direkt mit einem Newline enden und darf
    # keine weiteren Leerzeichen enthalten, denn "EOM  " ist nicht
    # das gleiche wie "EOM"!
    print <<"EOM";
    Content-Type: text/html
    <H1>1. CGI-Programm</H1>
    <P>Hier war es gerade
    $h Uhr $min und $sek Sekunden.
    <P>Das Datum ist: $mtag.$monat.$jahr.
    EOM
    # und aus"
    


    Gruß,
    -Andreas.

    • Antwort von nach 135 Tagen 0 hilfreich
      Re: Beheben eines 'Internal Server Error'

      Hallo Constantin und Andreas!

      Nur noch 'ne Anmerkung aus der Praxis: mit
      use strict;
      werden viele Scripte, die man so zum runterladen oder "abtippen" findet nicht funktionieren, man ist halt nicht immer so sorgfältig wie's in der Theorie sein sollte.
      Was dann aber nicht heißt, dass das Programm "falsch" wäre (pragmatisch gesehen)...
      Gruß Ingo

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!