Oliver Meisenberg: Aufruf eines zweiten Skripts

Beitrag lesen

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");