Robert(roboatturbo): bad header & immer wieder bad header

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.

  • einaml hab ich es geschafft, das er es speichert, aber nicht zur Detei geht
  • einaml war ich soweit das er speichert und zur Datei weiterleitet, aber dann meckert er auch (kenn die Fehlermeldung leider nicht mehr)

JETZT:

  • er speichert nihct und gibt nur diese Fehlermeldung aus.

hoffe die Angaben reichen für eine gute Diagnose.

MfG
Robert

  1. 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

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  2. 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

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?