Rene: Internal Server Error -- Wieso???

Hallo!
Ich habe ein CGI-File geschrieben und unter Omnihttpd auch getestet - es lief alles soweit ganz gut. Nun stelle ich das ganze in das Netz - der Pfad ist freigeschaltet und der chkmod ist auf 755 - und das ganze läuft nicht mehr. Vielleicht könnt ihr mir helfen? Hier die Auszüge aus dem Scipt. Es soll Formulardaten auslesen und wieder anzeigen (zur Überprüfung) (findet sich alles unter www.schustek.de/RSchustek/ ). Hier also das Script:

#!/usr/sbin/perl

read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
print "Content-type: text/html\n\n";
print "<html><head><title>Bestätigung</title>\n";

print "<script language=JavaScript>\n";
print    "function SendData()\n";
print    "{\n";
print    "window.location.href = 'http://www.schustek.de/RSchustek/cgi-bin/user.pl'\n";
print    "}\n";
print "</script>\n";

... hier folgen das einige Style-Sheeds ...

open(DATENDAT, ">http://www.schustek.de/RSchustek/daten.dat") die "Datendatei nicht gefunden\n";
print "<form name=Bestaetigung action='http://www.schustek/RSchustek/cgi-bin/user.pl' method=post>\n";
print "<fieldset align=center><br>\n";
print "<table cellpadding=5>\n";
@Formularfelder = split(/&/, $Daten); #Felder einlesen
foreach $Feld (@Formularfelder)
{
  ($name, $value) = split(/=/, $Feld);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/<!--(.\n)*-->//g;
  $Formular{$name} = $name;
  $Formular{$value} = $value;
  print "<tr valign=top><td width=10%>$Formular{$name}:</td><td width=5%></td><td width=10%><input readonly type=text size=30 name=$Formular{$name} value=$Formular{$value}></td></tr>\n";
  print DATENDAT "$Formular{$name}: $Formular{$value};\n";
   }
close(DATENDAT);
print "<br>\n";
print "</table>\n";
print "</form>\n";
print "</fieldset><br>\n";

... hier werden dann die Buttons definiert und alles zugemacht ...

Wie gesagt, beim Testen lief es und auch der Perl-Interpreter zeigt mir keinen Fehler an. Vielleicht wißt Ihr ja was. Danke schon einmal!
René

  1. #!/usr/sbin/perl

    Vielleicht ist der PERL-Pfad auf deinem Server anders. Probier mal
    #!/usr/bin/perl
    #!/bin/perl
    oder andere kombinationen...

    Dein Server-Admin sollte dir das aber auch genau sagen können....

    Udo

  2. Hi,

    Nun stelle ich das ganze in das Netz - der Pfad ist
    freigeschaltet und der chkmod ist auf 755 - und das ganze läuft
    nicht mehr.

    Das erste: hast du die Datei im ASCII-Mode übertragen?

    #!/usr/sbin/perl

    Das zweite: normalerweise ist der Perl-Pfad /usr/bin/perl - probiers
    aus ,)

    open(DATENDAT, ">http://www.schustek.de/RSchustek/daten.dat") die "Datendatei nicht gefunden\n";

    Das dritte: mit open() kann man keine Netzwerk-Zugriffe machen.
    Was du vorhast, geht nur mit LWP::Simple::Get(), also

    use LWP::Simple;
    $var = Get(URL);

    mfg
    CK1

  3. Hallo!
    #!/usr/sbin -(?)-/perl

    bist du dir da ganz sicher? nicht zufällig
       #!/usr/BIN/perl

    René

    Gruss

    rainer

  4. Hi,
    Omnihttp & Windows ist die erste zeile im Perlskript egal. Deshalb, wie die anderen schon sagten diese zeile checken:

    #!/usr/sbin/perl

    open(DATENDAT, ">http://www.schustek.de/RSchustek/daten.dat") die "Datendatei nicht gefunden\n";

    das hätte aber auch lokal nicht funtionieren dürfen ! oder hast du eine festplatte die http: heißt ?
    in der regel ist es hier soweiso einfacher, kein 'die' hintendran zuhängen, weil dann wird zumindest im falle, das die datei nicht vorhanden ist, einfach eine neue angelegt.

    dort dürften also die Fehler sein. sinnvoll kann es auch  sein Fehler abzufangen:
    $SIG{__DIE__} = $SIG{__WARN__} =     sub
    {
    print "Content-Type: text/html\n\n" ;
    print '<HTML>';
    print '<body><H1>FEHLER !</H1>';
    print "@_";
    print '</body></HTML>';
    exit 0
    };
    das am anfang eingefügt fängt alle die's und warn's ab und zeigt sie dem Browser.

    Struppi

  5. Hallo!

    Hallo Rene,

    Ich habe ein CGI-File geschrieben und unter Omnihttpd auch getestet - es lief alles soweit ganz gut. Nun stelle ich das ganze in das Netz - der Pfad ist freigeschaltet und der chkmod ist auf 755 - und das ganze läuft nicht mehr. Vielleicht könnt ihr mir helfen? Hier die Auszüge aus dem Scipt. Es soll Formulardaten auslesen und wieder anzeigen (zur Überprüfung) (findet sich alles unter www.schustek.de/RSchustek/ ). Hier also das Script:
    #!/usr/sbin/perl

    wie schon angesprochen liegt es evtl. am Pfad. Trotzdem solltest Du immer perl -w benutzen

    [...code...]

    Wie gesagt, beim Testen lief es und auch der Perl-Interpreter zeigt mir keinen Fehler an. Vielleicht wißt Ihr ja was. Danke schon einmal!

    versuche mal use CGI::Carp qw(carpout); Fehlermeldung werden so zum Browser umgeleitet.
    s.a. perldoc CGI::Carp

    René

    Gruß
       Kai

  6. Hallo,
    nachdem ich heute ebenfalls diese Mattscheibe hatte:

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

    Vielleicht hilfts.
    Hunold

  7. Hallo!

    Und fuer den Fall, dass das alles noch nichts genuetzt hat, gebe ich Dir jetzt noch den Link, der eigentlich schon in der ersten Antwort haette stehen sollen: http://www.teamone.de/selfaktuell/artikel/schroepl03.htm.

    So long

  8. Danke für Eure Hilfe!
    Zu dem Pfad: Bei Internet24 ist er wirklich #!/usr/sbin/perl. Obwohl es auf den Seiten von denen anders dokumentiert ist. Also, Danke noch einmal für die vielen Tips.

    René