html mit CGI aufrufen
Ralf
- cgi
0 Markus Thomas0 Ralf0 Markus Thomas0 Distl0 Ralf0 Markus Thomas0 Klaus Mock0 Ralf
0 Michael Schröpl
Hallo,
ich komme einfach nicht darauf. Möchte bei Aufruf einer cgi Datei, dass automatisch eine html Datei gestartet bzw geöffnet wird.
Folgendes:
chdir($home/pfad);
sub dopage {
$type = lc($_[0]);
local($prevpage, $nextpage);
if($type eq "login") {
open(page, "<test/login/login.html");
print "Content-type: text/html\n\n";
} elsif($type eq "loginfail") {
open(page, "<test/login/fail.html");
print "Content-type: text/html\n\n";
} elsif($type eq "index") {
open(page, "<test/index/index.html");
print "Content-type: text/html\n\n";
}
close(page);
return;
}
Die cgi sieht so aus:
#!/usr/bin/perl
require "config.pl";
dopage("index"); (oder irgendeine html Seite)
Wenn ich die cgi starte, bekomme ich nur ein weisses Fenster, aber keine html Seite geladen.
Wer kann mir weiter helfen?
Danke
Hallo!
Du hast nirgends etwas ausgegeben, deshalb kannst Du auch nichts sehen. Versuchs mal so:
sub dopage {
$type = lc($_[0]);
local($prevpage, $nextpage);
if($type eq "login") {
open(PAGE, "<test/login/login.html");
} elsif($type eq "loginfail") {
open(PAGE, "<test/login/fail.html");
} elsif($type eq "index") {
open(PAGE, "<test/index/index.html");
}
print "Content-type: text/html\n\n";
read PAGE, my $page, -s PAGE or die "Kann Datei nicht lesen: $!";
close(page);
print $page;
return;
}
Gruss Markus
Hallo!
Du hast nirgends etwas ausgegeben, deshalb kannst Du auch nichts sehen. Versuchs mal so:
sub dopage {
$type = lc($_[0]);
local($prevpage, $nextpage);
if($type eq "login") {
open(PAGE, "<test/login/login.html");
} elsif($type eq "loginfail") {
open(PAGE, "<test/login/fail.html");
} elsif($type eq "index") {
open(PAGE, "<test/index/index.html");
}
print "Content-type: text/html\n\n";
read PAGE, my $page, -s PAGE or die "Kann Datei nicht lesen: $!";
close(page);
print $page;
return;
}
Gruss Markus
Hallo Marcus
das hatte ich auch schon, es bleibt aber auch weiss
Ralf
Hallo!
das hatte ich auch schon, es bleibt aber auch weiss
Wenn alles weiss bleibt, heißt das, daß der Header zwar gesendet wurde, aber ansonsten nichts weiter. Eine Möglichkeit wäre, daß $file weder login, noch loginfail oder index enthält und damit wird auch keine Datei eingelesen. Poste doch mal das Skript etwas ausführlicher, vielleicht kann man dann den Fehler finden.
Gruss Markus
Hallo!
das hatte ich auch schon, es bleibt aber auch weiss
Wenn alles weiss bleibt, heißt das, daß der Header zwar gesendet wurde, aber ansonsten nichts weiter. Eine Möglichkeit wäre, daß $file weder login, noch loginfail oder index enthält und damit wird auch keine Datei eingelesen. Poste doch mal das Skript etwas ausführlicher, vielleicht kann man dann den Fehler finden.
Gruss Markus
OK.
Hier die Index.cgi
#!/usr/bin/perl
require "loadup.pl";
dopage("index");
die loadup.pl
$dir = "/home/der/www/pfad/zu/htdocs";
require "$dir/cgi-bin/config";
require "$dir/cgi-bin/test/other/routines.pl";
1;
die config
$baseurl = "http://www.url.de";
1;
die routines.pl
chdir($home/pfad);
sub dopage {
$type = lc($_[0]);
local($prevpage, $nextpage);
if($type eq "login") {
open(page, "<test/login/login.html");
print "Content-type: text/html\n\n";
} elsif($type eq "loginfail") {
open(page, "<test/login/fail.html");
print "Content-type: text/html\n\n";
} elsif($type eq "index") {
open(page, "<test/index/index.html");
print "Content-type: text/html\n\n";
}
close(page);
return;
}
Sorry Marcus, habe mit meinem Nickname (Distl) gepostet
Hallo!
die loadup.pl
die config
die routines.pl
Auf die schnelle fallen mir die fehlenden ';' auf.
Mit #!/usr/bin/perl -w erhälst Du Warnungen. Welche? Ggf. im Server-Error.log nachsehen.
Tut mir leid, aber ich muss gerade weg, melde mich später am Abend nochmal.
Gruss Markus
Hallo,
die routines.pl
chdir($home/pfad);
1.) $home ist nirgendwo gesetzt.
2.) chdir($home/pfad); ergibt bei mir (perl 5.6 'Illegal division by zero')
besser ist
chdir("$home/pfad");
wobei wie gesagt $home nicht definiert wurde (wahrscheinlich sollte es $dir heißen).
und bei pfad vermute ich auch es sollte eigentlich $pfad heißen, muß es aber nicht.
ich persönlich mag auch ein 'chdir' nicht so wirklich, ich vermeide es wo es nur geht, weil dadurch recht schnell der Ausgangspunkt, d.h eine definierte Umgebung verloren geht.
sub dopage {[...]
was mir hier abgeht ist eine Fehlerbehandlung:
sub dopage
{
my $type = lc($_[0]);
my $filename;
my $docdir = "$dir/pfad"; #statt chdir und $dir statt $home
local(*IN);
if($type eq 'login')
{
$filename = "$docdir/test/login/login.html";
}
elsif ($type eq 'loginfail')
{
$filename = "$docdir/test/login/fail.html";
}
elsif ($type eq 'index')
{
$filename = "$docdir/test/index/index.html";
}
else # falls $type irgendeinen blödsinn beinhaltet
{
$filename = "$docdir/test/invalid_type.html"; # oder was auch immer
}
print "Content-type: text/html\n\n";
if(open(IN,$filename))
{
print while <IN>; #datei ausgeben
close(IN);
}
else # falls das öffnen der Datei nicht geklappt hat
{
print <<EOF
hier eine schöne HTML-gestylte Fehlermeldung mit vielen DHTML Elementen und einem Flash, daß irgendwas überhaupt nicht stimmt;-)
EOF
;
}
return;
}
BTW: Die Formatierung des Quellcodes ist zwar Geschmacksfrage, aber etwas Struktur täte Deinem Code sicherlich nicht schlecht.
Perl kann zwar auch mit weitgehend unformatiertem Quellcode etwas anfangen, die Programmiererin allerding schon deutlich weniger. MIr passiert es immer wieder, daß ich, bevor ich ein Programm ändere, erst mal den Code so formatieren muß, damit ich halbwegs dessen Struktur verstehen kann.
Bei der Entstehung von Code mag man ja noch wissen, was gemeint ist, zwei Wochen später (und zig Zeilen Code weiter) sieht das ganze anders aus. Aber das nur am Rande.
Grüße
Klaus
Hallo Klaus,
vielen Dank für die Berichtigung, es funktioniert. Sorry für die Unordnung, aber ich fange gerade erst mit CGI an.
Gruß und Danke
Ralf
Hallo,
[...] Sorry für die Unordnung, aber ich fange gerade erst mit CGI an.
Dann ist jetzt die beste Zeit, damit anzufangen, sich einen guten Stil anzueignen.
Lies mal 'perldoc perlstyle' der beigepackten Dokumentation durch. Da sind einige gute Anhaltspunkte drin.
Je eher Du Dir einen gut leserlicher Stil aneignest, desto leichter wirds für Dich und andere, die eventuell mit Deinem Code zu tun haben.
Schlechte Angewohnheiten wird man ja bekanntlich wieder nur schwer los;-)
Viel Spaß noch mit Perl (und den hats Du sicher)
Klaus
Hi,
open(PAGE, "<test/login/login.html");
wie wäre es denn mit etwas defensiverer Programmierung und Fehlerbehandlung?
Bei einem open() kann beispielsweise verteufelt viel schief gehen ...
Viele Grüße
Michael