Meinrad Braun: Perl Scripte auf MS-IIS

Hallo

seit einiger Zeit beisse ich mir am MS-IIS (Internet Information Server)die
Zähne aus. Ich möchte mit einem PerlScript ASCII Dateien lesen und schreiben,
funktioniert aber nicht --> schade.

Ein Testscript soll folgende Prozeduren ausführen:
1. die Datei testtext.txt lesen
2. die Datei text1.txt schreiben
3. den Inhalt aus testtext.txt an den aufrufenden Browser (oder
Standardausgabe) zurücksenden

Grundsätzlich laufen Perl Scripte unter der vorhandenen Umgebung (NT 4.0,
Internet Information Server 4.0, ActivePerl Interpreter).
Wird das Programm über den NT-Explorer oder die DOS-Eingabeaufforderung
aufgerufen, werden die obengenannten Prozeduren problemlos aufgeführt.
Wird das Script jedoch über einen beliebigen Browser aufgerufen werden die
ersten beiden Prozeduren nicht ausgeführt, lediglich die leere
Ausgabeanweisungen an den Browser zurückgesandt.

Schreib- und Leserechte für das Verzeichnis cgi-bin sowie aller
Parentverzeichnisse sind richtig vergeben. Ebenso die Rechte für die
anonymen Benutzergruppen I_USR und I_WAM ?

Welche Einstellungen müssen noch vorgenommen werden um über das Perl
Script Dateien zu lesen und zu schreiben?

Vielen Dank im Voraus
Meinrad

  1. Moin,

    seit einiger Zeit beisse ich mir am MS-IIS (Internet Information Server)die
    Zähne aus. Ich möchte mit einem PerlScript ASCII Dateien lesen und schreiben,
    funktioniert aber nicht --> schade.

    "funktioniert nicht" funktioniert nicht.
    Was tritt fuer ein Fehler auf?

    Ich vermute einen typischen Fehler:
    Nimmst du das Verzeichnis, in dem das Script liegt als Arbeitsverzeichnis waehrend der CGI-Ausfuehrung an? Das ist es beim IIS naemlich mit Sicherheit nicht.

    Falls nein - poste doch mal bitte die Fehlermeldung(en).

    Viele Gruesse,

    n.d.p.

    1. Hallo

      "funktioniert nicht" funktioniert nicht.
      Was tritt fuer ein Fehler auf?

      Wie beschrieben werden Lese- und Schreibeanweisungen nicht ausgeführt wenn die Scripte über einen Browser aufgerufen werden.
      Die Ausführung funtioniert bei Aufruf über den NT-Explorer oder die DOS-Kommandozeile einwandfrei. Somit ist die Interpretation in Ordnung, und ich vermutet Probleme mit der Servereinstellung, aber welche.
      Die Doc zum IIS gibt nichts her und das Microsoft-Support-Center verweist mich auf irgendwelche wertlosen MS-Sites.

      Ich vermute einen typischen Fehler:
      Nimmst du das Verzeichnis, in dem das Script liegt als Arbeitsverzeichnis waehrend der CGI-Ausfuehrung an? Das ist es beim IIS naemlich mit Sicherheit nicht.

      Ich habe beides bereits ausprobiert, die Dateien in ein/aus ein anderes Verzeichnis zu lesen/schreiben, oder dies im cgi-bin Verzeichnis zu erledigen. Das Fehlerbild bleibt jedoch das gleiche.

      Falls nein - poste doch mal bitte die Fehlermeldung(en).

      Es gibt keine Fehlermeldungen. Beim Aufruf über den Browser wird der html-header und Text mittels print-Befehl ausgegeben.
      Beim Aufruf über die Kommandozeile wird das Script korrekt ausgeführt.

      Ich hoffe das Problem ist jetzt besser beschrieben.

      Soweit schon vielen Dank
      Meinrad

      1. Hallo,

        Es gibt keine Fehlermeldungen. Beim Aufruf über den Browser wird der html-header und Text mittels print-Befehl ausgegeben.
        Beim Aufruf über die Kommandozeile wird das Script korrekt ausgeführt.

        das liegt bestimmt am Verzeichnis. Ich weiß nicht genau, ob es auch unter Perl soetwas wie eine Map-Path funktion gibt, wenn Du ein ASP-Script in VBScript oder JScript verwendest, mußt Du die Funktion Server.MapPath(Pfad) verwenden.

        Am Besten mal in der Produktdoku unter "Referenz für Scriptprogrammierer" nachlesen, wie es funktioniert. Diese Doku sollte sich bei der IIS-Standardinstallation als HTML-Help mit installieren.

        CU Christoph

      2. Moin,

        "funktioniert nicht" funktioniert nicht.
        Was tritt fuer ein Fehler auf?

        Wie beschrieben werden Lese- und Schreibeanweisungen nicht ausgeführt wenn die Scripte über einen Browser aufgerufen werden.

        ja, die Frage ist doch: Warum?

        *seufz* ok, poste mal die relevanten Teile deines Scripts. Dann sehen wir weiter.

        Es gibt keine Fehlermeldungen.

        schlecht. Das deutet darauf hin, dass du im Fehlerfalle keine erzeugst...

        Viele Gruesse,

        n.d.p.

        1. Moin,

          Wie beschrieben werden Lese- und Schreibeanweisungen nicht ausgeführt wenn die Scripte über einen Browser aufgerufen werden.

          ja, die Frage ist doch: Warum?

          ja, das ist die Frage ...!

          *seufz* ok, poste mal die relevanten Teile deines Scripts. Dann sehen wir weiter.

          wie Du siehst einfachtes Perl. Deshalb gehe ich ja auch davon aus, dass es sich hier um ein Serverproblem handelt.

          #!/usr/bin/perl

          open(DTDREAD,"<testtext.txt"); # zeilenweises einlesen der Datei testtext.txt
          while(<DTDREAD>) { push(@dtdlist,$_); }
          close(DTDREAD);

          open(LFDNR, ">text1.txt"); # schreiben der Datei text1.txt
          print LFDNR "+++ Dieser String wird in die Textdatei text1.txt geschrieben +++";
          close(LFDNR);

          print "Content-type: text/html\n\n"; # Ausgabe des Inhaltes der Datei testtext.txt im Browser
          print "<html><body><h1>hier kommt der testtext-Text</h1>\n";
          for(@dtdlist) { print $_; }
          print "</body></html>\n";

          Es gibt keine Fehlermeldungen.

          schlecht. Das deutet darauf hin, dass du im Fehlerfalle keine erzeugst...

          vielleicht gibt es keinen Fehler

          soweit vielen Dank
          Meinrad

          1. Hallo,

            wie Du siehst einfachtes Perl. Deshalb gehe ich ja auch davon aus, dass es sich hier um ein Serverproblem handelt.

            ...

            schlecht. Das deutet darauf hin, dass du im Fehlerfalle keine erzeugst...
            vielleicht gibt es keinen Fehler

            solange du keine Fehlemeldung ausgibst, kannst du das nicht wissen. Und du gibst null Fehlermeldungen aus. Vielleicht versucht der Server mit dir zu kommunizieren und du hoerst einfach nicht hin. Sehr unhoeflich sowas. tsss tss

            Viele Gruesse
             Kess

          2. Moin,

            ja, die Frage ist doch: Warum?

            ja, das ist die Frage ...!

            wie Du siehst einfachtes Perl. Deshalb gehe ich ja auch davon aus, dass es sich hier um ein Serverproblem handelt.

            nein, Perl teilt dir die Fehler mit, du gibst sie nicht aus:

            #!/usr/bin/perl

            #!/usr/bin/perl -w
            use strict;

            use CGI::Carp qw(fatalsToBrowser);

            open(DTDREAD,"<testtext.txt"); # zeilenweises einlesen der Datei testtext.txt

            open (...) or die "konnte 'testtext.txt' nicht oeffnen zum lesen, weil: $!";

            while(<DTDREAD>) { push(@dtdlist,$_); }
            close(DTDREAD);

            close () or warn "konnte DTDREAD nicht schliessen nach dem Lesen, weil: $!";

            open(LFDNR, ">text1.txt"); # schreiben der Datei text1.txt

            dito, siehe oben

            print LFDNR "+++ Dieser String wird in die Textdatei text1.txt geschrieben +++";
            close(LFDNR);

            dito...

            print "Content-type: text/html\n\n"; # Ausgabe des Inhaltes der Datei testtext.txt im Browser
            print "<html><body><h1>hier kommt der testtext-Text</h1>\n";
            for(@dtdlist) { print $_; }
            print "</body></html>\n";

            Es gibt keine Fehlermeldungen.

            schlecht. Das deutet darauf hin, dass du im Fehlerfalle keine erzeugst...
            vielleicht gibt es keinen Fehler

            doch, doch, es gibt sie, du musst sie nur auswerten.

            Viele Gruesse,

            n.d.p.

  2. Hallo

    vielen Dank soweit, ich werde Eure Vorschläge heute noch umsetzen.

    Ciao
    Meinrad