Hallo @all!
Ich habe zwei CGI/Perl-Skripten geschrieben. Skript 1 liest Daten aus einer Textdatei und erstellt daraus eine HTML-Datei mit einem Formular (mehrere Text-Eingabefelder). Beim Abschicken der in das Formular eingetragenen Daten wird Skript 2 aufgerufen; dieses fügt die aus dem Formular gelesenen Daten der genannten Textdatei hinzu (im unten zitierten Code nicht enthalten, da wohl nicht relevant) und ruft wieder Skript 1 auf, das dann eine aktualisierte HTML-Datei erzeugen soll.
Dabei folgende Probleme:
Rufe ich Skript 1 direkt auf (c:/serverpfad/cgi-bin/script1.pl), erscheint nach einigen Minuten im Browser eine Fehlermeldung zu einem Internal Server Error und in der Log-Datei des Servers ein "Premature end of script headers: Script2.pl".
Rufe ich aus Skript 2 das Skript 1 über den Server auf (http://127.0.0.1/cgi-bin/script1.pl), erhalte ich einen Internal Server Error mit dem Log, der Befehl "http:" wurde nicht gefunden.
Zur Info:
Mein Server ist Apache 2; er läuft nur lokal (IP-Adresse: 127.0.0.1). Betriebssystem ist Windows XP, Browser IE 6.
Vielen Dank für hilfreiche Vorschläge.
Skript 1:
#!"C:\Programme\Perl\bin\perl.exe"
print "Content-type: text/html\n\n";
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
sub SeiteErzeugen { # erzeugt nur den Body
open(DATEI, "<c:/Textdatei.txt") || die "Datei nicht gefunden";
my @Daten = <DATEI>;
close(DATEI);
my $Nummer = 0;
print "<form action=\"http://127.0.0.1/cgi-bin/Script2.pl\" method=\"post\">\n";
foreach(@Daten) {
my $Formularcode = "Name: \n<input name=\"Name".$Nummer."\" type=\"text\">\n<input type=\"submit\" value=\"Eintragen\">\n";
print
"<p>
$_<br>
$Formularcode
</p>";
$Nummer++;
}
print "</form>";
}
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<body>";
SeiteErzeugen();
print "</body>\n</html>";
Skript 2:
#!"C:\Programme\Perl\bin\perl.exe"
use strict;
exec("c:/serverpfad/cgi-bin/Script1.pl");
# oder:
# exec("http://127.0.0.1/cgi-bin/Script1.pl");