Internal Server Error -- Wieso???
Rene
- cgi
0 Udo Giacomozzi0 Christian Kruse0 rainer0 Struppi0 Kai Diefenbach0 Hunold0 Calocybe0 Rene
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é
#!/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
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
Hallo!
#!/usr/sbin -(?)-/perl
bist du dir da ganz sicher? nicht zufällig
#!/usr/BIN/perl
René
Gruss
rainer
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
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
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
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
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é