Andre Muschter: Perl und ASCII-Dateien

Beitrag lesen

Hallo, liebe Fachkollegen,

ich habe ein Perl-Skript, das aus einer ASCII-Datei zeilenweise Daten einlesen soll. Diese Daten sollen verwendet werden, um Code fuer eine HTML-Seite, die dann ueber den Browser angezeigt wird, zu generieren. Eigentlich nichts besonderes. Der entsprechende Perl-Code fuer das Oeffnen und Einlesen der ASCII-Datei lautet:

open(PHOTOFILE,'<photo.txt');
while(<PHOTOFILE>)
{
  ... (Aufbereiten der eingelesenen Zeilen-Daten)
}
close(PHOTOFILE);

Ich habe das Skript auf 3 verschiedenen Systemen auf jeweils 2 verschiedene Art und Weisen getestet:

Zum einen im Browser, indem das Skript ganz normal ueber eine HTML-Anweisung aktiviert bzw. direkt in der URL-Zeile angesprochen wird;
zum anderen ueber Telnet auf der Konsole, indem das Skript direkt mit der Perl-Anweisung und dem Skriptnamen abgearbeitet wird. Der generierte HTML-Code wird dabei auf dem Bildschirm ausgegeben.

ERGEBNISSE:
Das Skript laeuft in beiden Faellen ohne (sichtbare) Fehler durch.
ABER:
Wenn das Skript ueber den Browser (und somit auch ueber den Web Server!!) laeuft, wird der oben angegebene Perl-Code zum Aktivieren der ASCII-Datei und zum Einlesen dieser ignoriert.
Wenn das Skript ueber "Perl scriptname.pl" von der Konsole aufgerufen wird, wird der oben angegebene Perl-Code korrekt abgearbeitet, die ASCII-Datei eingelesen und die gewonnenen Daten im zu generierenden HTML-Code beruecksichtigt und auf dem Bildschirm ausgegeben.

Die erwaehnten 3 Systeme sind:

  • das System meines Providers (Linux, Apache)
  • mein System unter S.u.S.E. Linux 6.0, Perl 5.004, Apache 1.3.3
  • mein System unter Windows NT 4, ActivePerl 5.005 bzw. Perl 5.001, Internet Information Server 4

Und, wie gesagt, unter ALLEN 3 Systemen die gleichen KORREKTEN bzw. FEHLERHAFTEN Ergebnisse. Eine gewisse Systematik ist bei diesem Problem sicherlich nicht von der Hand zu weisen.
Verrueckt zudem, dass es unter beiden "Glaubensrichtungen" (Linux wie auch NT) und deren Peripherie (Perl, Web Server) anzutreffen ist.

Wer weiss, woran das liegen koennte?

Anmerkung:
Ich habe das Problem auch schon in mehreren CIS-Foren vorgestellt und viele Hinweise bekommen, die folgende Ergaenzung noetig machen:

  • Die Anweisung
      print "Content-type: text/html\n\n";
    ist im Skript enthalten.

  • Der Aufruf von Perl mit Schalter -w (Warnungen ausgeben) produziert KEINERLEI Fehlermeldungen im Web Server-Protokoll.

  • Der Fehler ist nicht nur Online, nicht nur unter einem bestimmten Betriebssystem, nicht nur unter einem bestimmten Web Server und nicht nur unter einem bestimmten Perl.

Er tritt immer auf, wenn das Gespann Browser/Web Server in Spiel kommt. Als ob da ein ganz BOESER Schalter im IIS4/Apache gesetzt ist, der das Einlesen von ASCII-Dateien verbietet.   ;-)

Viele Gruesse

Andre