bad header & immer wieder bad header
Robert(roboatturbo)
- perl
Hi ihr Perlkenner,
ich bin absoluter N00bie und will trotzdem die Welt des Perlskripten kapieren.
Mein jetziges Projekt soll eine Datei erschaffen (.html), speichern, und dann ausgeben
Mein Skript:
---Skript || html.cgi---
#! c:/perl/bin/perl.exe -w
use CGI qw(param header);
my $name = param('name');
my $dateiname = "../cgi/html/erstellt/$name.html";
open (HTML, "> $dateiname") || die "\n$dateiname konnte nicht geöffnet werden\n";
my $htmlText = <<HERE_HTML;
<html><body>
$name
<body><html>
HERE_HTML
print HTML header;
print HTML $htmlText;
close (HTML);
print "Location: $dateiname\n\n";
exit;
---Skript---
---HTML mit <form> || html_erstellen.html---
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>"'' HTML - erstellen ''"</title>
<meta name="author" content="ROBOatturbo">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<body>
<form action="http://localhost/cgi-bin/html/html.cgi" encType="multipart/form-data" method="post">
<input name="name">
<input type="submit">
</form>
</body>
</html>
---HTML mit <form>---
soll natürlich später noch erweitert werden.
---Fehlermeldung---
Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
Premature end of script headers: html.cgi
---Fehlermeldung---
ich probiere schon seit längerem rum.
JETZT:
hoffe die Angaben reichen für eine gute Diagnose.
MfG
Robert
Hi,
#! c:/perl/bin/perl.exe -w
Stimmt der Pfad? Laß mal das Leerzeichen zwischen ! und c: weg
open (HTML, "> $dateiname") || die "\n$dateiname konnte nicht geöffnet werden\n";
Hier passiert u.U. schon eine Ausgabe, ohne daß ein Header gesetzt ist.
Außerdem: immer auch $! mit ausgeben, um die Fehlerursache zu sehen.
print HTML header;
print HTML $htmlText;
close (HTML);
print "Location: $dateiname\n\n";
Warum schreibst Du erst in eine Datei, um dann auf diese umzulenken?
Warum schreibst Du nicht direkt an den Browser (also auf stdout)?
Außerdem:
Du leitest auf
my $dateiname = "../cgi/html/erstellt/$name.html";
um. Ein Location-Header muß aber eine absolute URL enthalten.
cu,
Andreas
mahlzeit,
Ein Blick ins Error-Log wäre der richtige Weg zur Diagnose...
Hinweise:
here Docs haben eine Fallstrick
http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.5.9
Vor der ausgabe eines print location darf kein header ausgegeben werden
http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.10.5
Das Script muss Berechtigungen haben zum Anlegen von Dateien und der Pfad muss stimmen (am Besten absolut angeben).
Viele Grüße, Rolf