Nicolas Muehlen: Perl-Path unter NT

Hallo zusammen,
ich bin am verzweifeln: jetzt habe ich endlich einen Windows-NT Server, aber jetzt bekomme ich kein Perl-Script zum Laufen, da ich nicht weiß, wie die erste Zeile (#!/usr/bin/perl [unter Unix]) aussehen soll. Ich weiß, daß sich Perl auf dem Server unter C:\Perl\5.00502\bin\MSWin32-x86-object\perl.exe befindet, aber wie muss dann die oben genannte erste Zeile aussehen?
Viele Grüsse,

Nicolas Muehlen

  1. Ich weiß, daß sich Perl auf dem Server unter C:\Perl\5.00502\bin\MSWin32-x86-object\perl.exe befindet, aber wie muss dann die oben genannte erste Zeile aussehen?

    Hallo Nicolas,

    nicht verzweifeln, die Loesung liegt so nah...

    Diese "Shebang"-Zeile ist eigentlich fuer UNIX-Systeme, um die interpretierte Sprache (hier Perl) mit dem richtigen Interpreter auszufuehren (hier perl.exe). Ist unter Win32-Systemen (mit Ausnahmen) also eigentlich egal. Du kannst den Pfad aber auch so angeben, wie er da steht:
       #!c:\perl\5.00502\bin\MSWin32-x86-object\perl.exe
    (Quelle: Einfuehrung in Perl fuer Win32 von O'Reilly)

    Wichtig ist aber die Verknuepfung von Perl, das ist je nach NT- und IIS-Version ein bisschen anders und die haeufigste Fehlerquelle. Schau mal bei der ActivePerl-Distribution nach, siehe unter http://www.activestate.com, da sind ziemlich gute FAQ's zur Konfiguration fuer verschiedene Win32-Systeme enthalten.

    Bye, Michael

    1. Hallo Nicolas,

      Habe selber auch nochmal nachgeschaut:

      kleine Zusatzfrage, falls Du NT4 und den Personal Web Server oder IIS (bis 3)hast:
      Oeffne mal Deine Registry und schau nach folgendem Abschnitt in der Registry:
      "HKEY_LOCAL_SYSTEM\System\CurrentControlSet\Services\W3SVC\Parameters\Script Map"
      Da muessten eigentlich die Dateiendungen Deiner Scripts (z.B. "pl" oder "cgi") als Schluessel vorhanden sein. Die Werte saehen dann so aus:
      "C:\DeinPfad\perl.exe %s %s"
      U.u. ist auch eine Verknuepfung zu PerlIS da (perl.dll).
      Die Scripte selbst muessen dann ins CGI-BIN Verzeichnis Deines Webservers. Falls dieses Verzeichnis "Scripts" heisst, musst Du in Deiner Webserver-Konfiguration darauf achten, dass Du dieses zum viruellen "CGI-BIN"-Verzeichnis gemacht und die entsprechenden Rechte auf dieses Verzeichnis eingerichtet hast. Auch Perl selbst und die verwendeten Module muessen passende Rechte haben.
      Falls Du den Internet Information Server 4 aus dem NT-Option-Pack nutzt, gibt's dort, soweit ich mich erinnern kann, Konfigurationsmoeglichkeiten fuer die Perlassoziierung innerhalb der Serververwaltung, ohne in der Registry "herumbasteln" zu muessen.

      I hope it works,

      Bye, Michael

      1. Hallo,

        kleine Zusatzfrage, falls Du NT4 und den Personal Web Server oder IIS (bis 3)hast:

        Oeffne mal Deine Registry und schau nach folgendem Abschnitt in der Registry: "HKEY_LOCAL_SYSTEM\System\CurrentControlSet\Services\W3SVC\Parameters\Script Map"<<

        Der Server ist ja gar nicht mein eigener, ich lasse von http://www.awwm.com/ hosten, von daher ist das mit der Registry natürlich schwer...

        Die Scripte selbst muessen dann ins CGI-BIN Verzeichnis Deines Webservers.<<

        Ein CGI-Bin habe ich noch nicht gefunden (das Ausführen von Perl-CGI-Scripten ist laut Provider aber erlaubt). Muss es das bei NT überhaupt geben (ich hoffe, daß war jetzt keine allzu dumme Frage <g>)?
        Viele Grüsse,

        Nicolas Muehlen

        1. Der Server ist ja gar nicht mein eigener, ich lasse von http://www.awwm.com/ hosten, von daher ist das mit der Registry natürlich schwer...

          Uups, Missverstaendnis.

          Ein CGI-Bin habe ich noch nicht gefunden (das Ausführen von Perl-CGI-Scripten ist laut Provider aber erlaubt). Muss es das bei NT überhaupt geben (ich hoffe, daß war jetzt keine allzu dumme Frage <g>)?

          Ne, ne, fuehle mich selbst meist wie ein Analphabet in der Staatsbibliothek.
          Aber im Ernst: jepp, da ja dieses Verzeichnis andere Rechte braucht als das Verzeichnis mit Deinen Seiten. Lesen soll's keiner koennen, aber ausfuehren.
          Du solltest Dich mal mit Deinem Provider kurzschliessen: welche Dateiendungen sind erforderlich (cgi, pl, plx etc?), sind also mit Perl assozieert. Da ich Dein Script nicht kenne, vielleicht verbergen sich da ja auch noch Pfadangaben drin, die sich auf reale Verzeichnisse des Servers beziehen. Oder Du verwendest unbekannte Module? Die noetigen Angaben bekommst muesstest Du von awwm bekommen.

          Bye, Michael

        2. Der Server ist ja gar nicht mein eigener, ich lasse von http://www.awwm.com/ hosten, von daher ist das mit der Registry natürlich schwer...
          Die Scripte selbst muessen dann ins CGI-BIN Verzeichnis Deines Webservers.
          Ein CGI-Bin habe ich noch nicht gefunden (das Ausführen von Perl-CGI-Scripten ist laut Provider aber erlaubt). Muss es das bei NT überhaupt geben (ich hoffe, daß war jetzt keine allzu dumme Frage <g>)?

          --> nein, muß es nicht, kann auch anders heißen, nur muß es als für scripte ausführbar markiert sein. soll heißen: leg es einfach an, öffne das web AM SERVER ! mit fp98, (die servererweiterungen werden sie ja haben, wenn sie iis fahren) und kennzeichne es mit 'bearbeiten'-'eigenschaften'-'scripst ausführbahr'.
          achtung: perl-scripts tun sich auf nt mit relativen pfaden schwer, daher entweder absolute urls angeben, oder betreffende datei und script ins selbe verzeichnis legen.
          hast du ein script, das sich selbst oder ein anderes aufruft, brauchst du denn absoluten pfad am server. rückt den dein provider nicht heraus, stellst du ihn mithilfe von meister muquits wwwcounter(für nt!) leicht fest:
          setz die counter.exe ins cgi-bin-verzeichnis und einen zähler auf eine testseite, aber kein _dat-file, dann gibt er beim aufruf der seite eine fehlermeldung (mit absolutem pfad) aus, wo ihm das _dat-file fehlt.
          (funktioniert glaub ich auch bei unix-servern)
          darüberhinaus mag nt keine doppelten anführungszeichen ("), ersetze sie durch einfache (')
          welche endung mit perl assoziiert ist, bekommst du auch leicht heraus: schreib irgend ein script mit der .pl, .cgi, .usw - endung ins cgi-bin verzeichnis und ruf es auf (durch direkte adressierung mit url). gibt dir der browser das script als text aus, ist es diese endung nicht, die meldung '%1 ist keine gültige nt-anwendung' bedeutet, dein server hat perl nicht installiert.
          viel glück, cm

          1. Hallo,
            danke für die ausführliche Hilfe :-) Ich hab das Problem jetzt allerdings gelöst, indem ich einfach auf den Unix-Server meines Providers umgezogen bin <g>
            Irgendwie merkwürdig, bei Unix habe ich das Problem, daß gleich bei jeder Kleinigkeit eine Fehlermeldung kommt und bei NT habe ich das Problem, daß fast nie eine kommt...
            Viele Grüsse,

            Nicolas Muehlen

            1. ... jeder Kleinigkeit eine Fehlermeldung kommt und bei NT habe ich das Problem, daß fast nie eine kommt...

              wo nix is, kann nix kommen . . .

              liebe grüße, cm

          2. Hallo Christian,

            achtung: perl-scripts tun sich auf nt mit relativen pfaden schwer, daher entweder absolute urls angeben, oder betreffende datei und script ins selbe verzeichnis legen.<<

            Ich hab mich jetzt doch noch entschloßen, noch etwas mit dem NT-Server herumzuprobieren, sollte man ja schließlich auch können :-)
            Das Problem habe ich mittlerweile glaube ich auch gefunden: ich versuche gerade einen Formmailer einzurichten, allerdings kommen die Mails nie. Zunächst dachte ich daher, daß das Script überhaupt nicht laufen würde, aber dann hab ich meinen Server mal als Referer aus dem Script genommen - und siehe da, da kam eine Fehlermeldung. Also muss das Script ja zumindest teils doch funktionieren.
            Ich vermute, daß der Fehler in dem absoluten Pfad liegt. Allerdings liegt die windmail.exe bei meinem Provider auf c: und meine Homepage auf d: . Hast du eine Idee, was ich da machen könnte?
            Viele Grüsse,

            Nicolas Muehlen

    2. Hallo,

      nicht verzweifeln, die Loesung liegt so nah...

      Diese "Shebang"-Zeile ist eigentlich fuer UNIX-Systeme, um die interpretierte Sprache (hier Perl) mit dem richtigen Interpreter auszufuehren (hier perl.exe). Ist unter Win32-Systemen (mit Ausnahmen) also eigentlich egal.

      Das stimmt so nicht. Apache für Windows z.B. braucht diese Zeile auch! Wenn sie nicht drin ist, wird das Programm als Textdatei übertragen!

      Du kannst den Pfad aber auch so angeben, wie er da steht:
         #!c:\perl\5.00502\bin\MSWin32-x86-object\perl.exe
      (Quelle: Einfuehrung in Perl fuer Win32 von O'Reilly)

      IMO besser: Einfach nur "#!perl".
      Den Pfad holt sich zumindest Apache (andere Server hab' ich mir noch nicht angetan... :)) vom System, außerdem kann ich auf die Art die lokal getesteten Scripts einfach auf meinen Unix-Server kopieren ohne sie zu ändern... nur einen Softlink von Perl ins Script-Verzeichnis ist dann noch nötig... (OK, genug der Verwirrung, is' ja nur für Leute wie mich, die Unix als Server vorziehen...) :)
      Evtl. funktioniert das ja auch mit anderen Servern unter Windoofs. Dann kannst Du dir zum Testen einen freien Webserver wie eben z.B. Apache auf deinen Privat-PC installieren und die Scripts erstmal lokal austesten. Spart Online-Kosten und Ärger (bei der Fehlersuche - oder mit dem Provider, wenn 'ne Endlosschleife drin ist ;)))...

      Wichtig ist aber die Verknuepfung von Perl, das ist je nach NT- und IIS-Version ein bisschen anders und die haeufigste Fehlerquelle. Schau mal bei der ActivePerl-Distribution nach, siehe unter http://www.activestate.com, da sind ziemlich gute FAQ's zur Konfiguration fuer verschiedene Win32-Systeme enthalten.

      Stimmt...

      Ciao,
      Mirko