Götz: Perl und Apache unter Windows

Hallo!

Ich möchte gern auf meinem Apache Server unter Windows CGI-Dateien ausführen, ohne den Pfad in den Scripten in der ersten Zeile, auf den Interpreter zu verweisen (#!perl).
Gibt es eine Möglichkeit Apache so einzurichten, dass dieser *.pl und *.cgi immer mit Perl ausführt, mit dem ihm bekannten Pfad?
Ich frage das, weil ich gern die Dateien so übernehmen will, wie sie auch auf dem UNIX-Server meines Providers liegen (#!/usr/bin/perl)
Danke
Götz

  1. hi!

    Ich möchte gern auf meinem Apache Server unter Windows CGI-Dateien
    ausführen, ohne den Pfad in den Scripten in der ersten Zeile, auf
    den Interpreter zu verweisen (#!perl).

    Aus der httpd.conf:

    === cut ===

    Apache parses all CGI scripts for the shebang line by default.

    This comment line, the first line of the script, consists of the symbols

    pound (#) and exclamation (!) followed by the path of the program that

    can execute this specific script.  For a perl script, with perl.exe in

    the C:\Program Files\Perl directory, the shebang line should be:

    #!c:/program files/perl/perl

    Note you _must_not_ indent the actual shebang line, and it must be the

    first line of the file.  Of course, CGI processing must be enabled by

    the appropriate ScriptAlias or Options ExecCGI directives for the files

    or directory in question.

    However, Apache on Windows allows either the Unix behavior above, or can

    use the Registry to match files by extention.  The command to execute

    a file of this type is retrieved from the registry by the same method as

    the Windows Explorer would use to handle double-clicking on a file.

    These script actions can be configured from the Windows Explorer View menu,

    'Folder Options', and reviewing the 'File Types' tab.  Clicking the Edit

    button allows you to modify the Actions, of which Apache 1.3 attempts to

    perform the 'Open' Action, and failing that it will try the shebang line.

    This behavior is subject to change in Apache release 2.0.

    Each mechanism has it's own specific security weaknesses, from the means

    to run a program you didn't intend the website owner to invoke, and the

    best method is a matter of great debate.

    To enable the this Windows specific behavior (and therefore -disable- the

    equivilant Unix behavior), uncomment the following directive:

    #ScriptInterpreterSource registry

    The directive above can be placed in individual <Directory> blocks or the

    .htaccess file, with either the 'registry' (Windows behavior) or 'script'

    (Unix behavior) option, and will override this server default option.

    === cut ===

    Ich frage das, weil ich gern die Dateien so übernehmen will, wie
    sie auch auf dem UNIX-Server meines Providers liegen (#!/usr/bin/perl)

    Alternative: Perl nach C:\usr\ installieren.

    bye, Frank!

    1. hi!

      Aus der httpd.conf:

      === cut ===

      ...

      === cut ===

      Der erste Teil funzt bei mir irgendwie nicht

      Ich frage das, weil ich gern die Dateien so übernehmen will, wie
      sie auch auf dem UNIX-Server meines Providers liegen (#!/usr/bin/perl)

      Alternative: Perl nach C:\usr\ installieren.

      Die Idee war gut, leider würde ich es allerdings vorziehen wenn das mit der Zeile in der httpd.conf gehen würde.
      Was mache ich denn da falsch? Ich habe dort folgende Zeile
      #!C:/Programme/Perl/bin/perl
      Oder muss man da noch was anderes Einstellen?

      Götz

      1. hallo

        Was mache ich denn da falsch? Ich habe dort folgende Zeile
        #!C:/Programme/Perl/bin/perl

        das ist die Zeile die in die Perl- CGI-dateien kommen muss!

        ich habe folgendes bei mir in der httpd.conf:

        ...

        ScriptAlias /cgi-bin/ "C:/Programme/Apache Group/Apache/cgi-bin/"
        ...

        To use CGI scripts:

        AddHandler cgi-script .cgi
        AddHandler cgi-script .pl
        -----
        in der Perldateien steht bei mir in der ersten zeile

        #!perl

        -----

        willst per bzw. cgi dateien in eiem anderen verzeichniss ablegen muss du für das verzeichniss "ExecCGI" erlauben.

        grüße
        Thomas

        ps: httpd.con auf deutsch:
        http://aktuell.de.selfhtml.org/artikel/server/apacheconf/index.htm

      2. Hi Götz,

        Der erste Teil funzt bei mir irgendwie nicht

        "Funzt nicht" funktioniert nicht - Problembeschreibung, bitte.

        Die Idee war gut, leider würde ich es allerdings vorziehen wenn
        das mit der Zeile in der httpd.conf gehen würde.

        Das halte ich auch für die elegantere Lösung in Deinem Fall, sofern es
        Deinem Arbeitsstil nicht widerspricht (siehe unten).

        Was mache ich denn da falsch? Ich habe dort folgende Zeile
        #!C:/Programme/Perl/bin/perl

        Wo ist 'dort'?
        In der Apache-Konfiguration hat diese Zeile nichts verloren.
        In Deinem Fall hat sie sogar überhaupt nirgendwo etwas verloren, denn

        • im Perl-Skript willst Du ja die UNIX-Variante drin haben, und
        • in der Windows-Installation soll Zeile 1 des CGI-Skripts demzufolge
            möglichst ignoriert werden.
          Genau letzteres bewirkst Du, indem Du die ScriptInterpreterSource aus
          der Registry übernimmst, wie Frank vorgeschlagen hat.

        Letzteres bewirkt, daß der Apache nicht mehr in Deinem CGI-Skript nach-
        sieht, wo der Interpreter steht, sondern von Windows das verlangt, was
        im Windows-Explorer ein Doppelklick auf Dein CGI-Skript bewirken würde.
        Damit dies dann den von Dir gewünschten Effekt gibt, muß in Windows die
        Endung Deines CGI-Skripts mit dem Perl-Interpreter verknüpft sein - nor-
        malerweise gibt man so etwas bei der Installation des Perl-Interpreters
        an, es geht aber auch irgendwie manuell nachzutragen.

        Ich selbst verwende diese Technik übrigens nicht, weil ich die Endung
        meiner CGI-Skripte mit meinem Editor verknüpft habe - das ist mir zum
        flüssigen Arbeiten wichtiger.
        Perl nach c:\usr zu installieren gefällt mir irgendwie auch nicht so
        recht, das widerspricht meinem Ordnungssinn bezüglich des Dateibaums.
        Falls ich CGI-Skripte zuerst lokal austeste und erst danach auf den Ziel-
        Server spiele, kann ich damit leben, vor diesem Transfer (der ja nur
        selten vorkommt) die 1. Zeile manuell zu ändern; die Version für die
        jeweils andere Version lasse ich dabei normalerweise als Kommentar im
        Skript drin.

        Viele Grüße
              Michael