Stephan: fehlersuche

Hallo,

mein CGI-Script sieht so aus:

#!/usr/bin/perl

open(FILE,">http://192.168.0.99/mail-cgi/test.html") die $!;
print FILE "Content-type: text/html\n\n";
print FILE "<html>\n";
print FILE "<head>\n";
print FILE "</head>\n";
print FILE "<body>\n";
print FILE "HTML-Datei\n";
print FILE "</body>\n";
print FILE "</html>\n";
close(FILE);

wenn ich das jetzt über den IE aufrufe, bekomme ich die Fehlermeldung 500 Internal Server Error
das verzeichnis mail-cgi ist chmod 777 und das script ist chmod 755
der besitzer ist der gleiche

woran könnte das liegen?

Stephan

  1. Hi,

    open(FILE,">http://192.168.0.99/mail-cgi/test.html") die $!;

    das funktioniert nicht. Du kannst Dateien nur innerhalb des Servers öffnen, insbesondere schreibend. Dazu mußt Du den Dateinamen etwa als "/www/account/mail-cgi/test.html" angeben - frage dazu bitte Deinen Provider bzw. die Hilfeseiten in seinem Angebot.

    »»  print FILE "Content-type: text/html\n\n";
    »»  print FILE "<html>\n";
    »»  print FILE "<head>\n";
    »»  print FILE "</head>\n";
    »»  print FILE "<body>\n";
    »»  print FILE "HTML-Datei\n";
    »»  print FILE "</body>\n";
    »»  print FILE "</html>\n";
    »»  close(FILE);

    Bei geschriebenen Dateien lohnt es sich, auch beim Schließen den Fehlercode abzufangen:

    close(FILE) or die "Kann Datei x nicht schliessen: $!";

    wenn ich das jetzt über den IE aufrufe, bekomme ich die Fehlermeldung 500 Internal Server Error

    Du schreibst zwar in eine Datei (bzw. versuchst es), gibst aber nichts an den Browser zurück. Wiederhole sämtliche print-Zeilen ohne das "FILE". Für die Datei brauchst Du übrigens im Grunde den Content-type nicht, sondern nur für die Bildschirmausgabe.

    Cheatah

    1. Hallo,

      es funktioniert!!

      *jubel*

      DANKE!

      Stephan (der sich jetzt an das versenden per mail macht ...)

    2. das funktioniert nicht. Du kannst Dateien nur innerhalb des Servers öffnen, insbesondere schreibend. Dazu mußt Du den Dateinamen etwa als "/www/account/mail-cgi/test.html" angeben - frage dazu bitte Deinen Provider bzw. die Hilfeseiten in seinem Angebot.

      Richtig ist vielmehr, dass man nur auf Dateien innerhalb des Dateisystems öffnen kann. Die oben genannte Datei kann sich durchaus auf dem gleichen Rechner befinden. Nur ist der angegebene Pfad halt kein Dateipfad.

      Ich kann aber auch auf Datei eines anderen Rechners zugreifen, wenn sie über das Dateisystem meines Rechners zu erreichen sind (etwa per NFS gemoutet).

      Peter

  2. Ich habe das Script nur ein ganz kleines bischen geändert, und in meiner Testumgebung läuft es jetzt.
    (Win98SE, OmniHTTPd 2.05, Perl 5.irgendwas)

    #!/usr/bin/perl

    open(FILE,">../test.html") die $!;
    print FILE "Content-type: text/html\n\n";
    print FILE "<html>\n";
    print FILE "<head>\n";
    print FILE "</head>\n";
    print FILE "<body>\n";
    print FILE "HTML-Datei\n";
    print FILE "</body>\n";
    print FILE "</html>\n";
    close(FILE);

    Wobei Du kontrollieren mußt, ob der Server auf dem das Script laufen soll, solche Pfadangaben wie oben mag :))

    Lass Dich nicht verwirren, Du brauchst natürlich das Filehandle hinter jedem Print-Befehl, sonst kommt ja nichts in der Datei an.