Struppi: open-Funktion verursacht Internal Server Error

Beitrag lesen

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

#Header  ausgeben
print "Content-type: text/html\n\n";

#Datei öffnen
my $url = "test.dat";
open(data, "<$url") || die "Datei '",$url,"' nicht gefunden";

Du kanst dir hier den Grund angeben lassen, warum das fehlschlug und mußt nicht raten (Datei nicht gefunden ist nur eione von zig Möglichkeiten).

open(data, "<$url") || die "Fehler beim öffnen von  '$url'. Grund: $!";

(Übrigens sollen Filhandle in Großbuchstaben geschrieben werden, wenn du dich an ein paar Konventionen hälst, fällt es dir leichter deine und andere Programme zu lesen)

my @log = <data>;
close(data);
chomp(@log);

Man kann das zusamenfassen:

chomp (my @log = <data>);
close data;

#HTML-Ausgabe
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>\n";
print "<H1>Inhalt von '",$url,"':</H1>\n";
print "<TT>\n";

Hier bieten sich here Dokumente an oder die Verwendung des CGI Moduls.

print CGI::header(), CGI::start_html(-title => 'Test'),
CHI::h1("Inhalt von $url")', '<TT>';

Wie gesagt, die üblichen Fehler (keine Rechte, falsches Dateiformat, etc.) scheiden aus, da das Script läuft, wenn den open-Befehl entferne. Auch die Datei "test.dat" existiert im selben Verzeichnis wie das Test-Script.

Das muss nichts heißen. Nicht jeder server ist so eingestellt, dass der Standardpfad das gleiche wie der Pfad des Skriptes ist.

Du kannst es dir ausgeben lassen:

use Cwd;

print cwd();

Übrigens $url klingt für mich, als ob du versuchst eine entfernt liegende Resource zu öffnen, das geht aber nicht mit dem open Befehl. Aber vermutlich weißt du das.

Struppi.