Zero: Problem Perl auf dem Apache zum laufen zu bringen

Hallo ich habe mir auf dieser Seite die Verweise zu Perl und dessen Installation durchgelesen, aber bekomme es einfach nicht zum laufen.
In meinem Browser wird nur folgender html code angezeigt:

#!/perl/bin/perl
print "Content-type: text/html\n\n";
print "<h1>Hurra, es klappt!</h1>";

Ich habe ActivePerl in das Verziechnis C:/Perl installiert. Demnach müsste in die Shebang-Zeile #!/perl/bin/perl  ,weil die exe ja in diesem Verzeichnis "bin" liegt.

Meine Apache Configuration sieht wie folgt aus:

C:\Apache\conf\httpd.conf für Apache 2.2.x

Einsatzplattform Windows

ServerRoot "C:/Apache"
PidFile logs/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

ThreadsPerChild 250
MaxRequestsPerChild  0

Listen 80

Include "C:/Apache/conf/module.conf"

ServerAdmin  zero8@lycos.de
ServerName  zero.mshome.net:80
DefaultType  text/plain
ErrorLog logs/error.log
LogLevel warn
LogFormat  "%h %l %u %t "r" %>s %b" common

ServerTokens  Full
ServerSignature  On

DocumentRoot "C:/Apache/htdocs"
<Directory />
 Options FollowSymLinks
 AllowOverride None
</Directory>
<Directory "C:/Apache/htdocs">
 Options Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
 AddOutputFilter INCLUDES .shtml .shtm
</Directory>

DirectoryIndex index.htm index.html index.shtml index.shtm index.cgi index.php

ScriptAlias /cgi-bin/ "C:/Aapche/htdocs/cgi-bin"
<Directory "C:/Apache/htdocs/cgi-bin">
 AllowOverride None
 Options Indexes FollowSymLinks ExecCGI
 Order allow,deny
 Allow from all
</Directory>

ScriptAlias /php/ "C:/php/"
AddType application/x-httpd-php .php .php4 .phtml
Action Application/x-httpd-php "/php/php-cgi.exe"
<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny from all
 Allow from 192.168
</Location>
<Location /server-info>
 SetHandler server-info
 Order deny,allow
 Deny from all
 Allow from 192.168
</Location>

Include "C:/Apache/conf/mime.conf"
Include "C:/Apache/conf/autoindex.conf"

LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/PHP"

AddHandler cgi-script .cgi .pl

Ich habe die cgi-bin in htdocs verschoben, da ich dachte, dass es vielleicht daran liegt, dass ich dieses Dokument über den Browser aufrufe.
Eigentlich war das cgi-bin Verzeichnis unter C:\Apache\cgi-bin.

Ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen

Zero

  1. Moin,

    zwei Dinge sind wichtig, 1. der virtual Host, 2. die shebang.

    Bsp. zu 1., cgi-schnittstelle mit ScriptAlias

    <VirtualHost 127.0.0.1>
     ServerName stick
     DocumentRoot f:/var/www/vhosts/rolfrost.de/httpdocs
     ScriptAlias /cgi-bin/ f:/var/www/vhosts/rolfrost.de/cgi-bin/
    </VirtualHost>

    <VirtualHost 127.0.0.1>
     ServerName kaitsch
     DocumentRoot f:/var/www/vhosts/rolfrost.de/subdomains/kaitsch/httpdocs
     ScriptAlias /cgi-bin/ f:/var/www/vhosts/rolfrost.de/subdomains/kaitsch/cgi-bin/
    </VirtualHost>

    Trailing Slashes bei ScriptAlias!

    zu2. Wenn der Perl-interpreter auf dem gleichen LW liegt wie der Apache, sollte eine shebang like

    #!/perl/bin/perl

    funktionieren. Ansonsten lege eine Kopie von "perl.exe" auf das Apache-LW in ein Verzeichnis /usr/bin

    die shebang

    #!/usr/bin/perl

    ist somit in allen Scripts kompatibel zu LINUx und Co.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Das mit dem Virtual Host verstehe ich nicht ganz.
      Mein Apache läuft ja, allerdings will er mir die in der
      cgi-bin befindliche Datei nicht anzeigen.
      In welche Zeile muss ich den command denn einfügen?

      MfG

      Zero

      1. Das mit dem Virtual Host verstehe ich nicht ganz.
        Mein Apache läuft ja, allerdings will er mir die in der
        cgi-bin befindliche Datei nicht anzeigen.

        Soll er ja auch nicht, er soll sie ausführen. Dazu reicht es im Prinzip wenn du auf dieses Verzeichnis einen SkriptAlias in der Apache Konfiguration setzt.
        Oder in der .htaccess Datei einen Handler für das cgi Skript.

        ausserdem kannst du unter windows die Direktive
        ScriptInterpreterSource registry
        einschalten, dann brauchst du keine Windows Shebang zu verwenden, sondern kannst dort einen Wert eintragen, der üblicher ist, z.b. #!/perl/bin/perl

        Struppi.

        1. Mein Apache läuft ja, allerdings will er mir die in der
          cgi-bin befindliche Datei nicht anzeigen.

          sry das war falsch von mir ausgedrückt.
          Wollte sagen, dass mein Browser die Datei nicht richtig anzeigt/wiedergibt.

          Dazu reicht es im Prinzip wenn du auf dieses Verzeichnis einen SkriptAlias in der Apache Konfiguration setzt.

          Das habe ich meines Wissens nach schon

          ScriptAlias /cgi-bin/ "C:/Aapche/htdocs/cgi-bin/"
          <Directory "C:/Apache/htdocs/cgi-bin">
           AllowOverride None
           Options Indexes FollowSymLinks ExecCGI
           Order allow,deny
           Allow from all
          </Directory>

          Wenn an dieser config was falsch sein sollte bitte korrigieren oder mir bitte sagen was ich wo zu verändern habe und wieso es bisher falsch war. Oder falls ihr in der allgemeinen config Fehler finden solltet.

          In meinem Apache-Ordner befindet sich keine Datei .htacess

          Tut mir leid das ich da noch nich so ganz hinter steige, aber bin relativ neu euf dem Gebiet und für jede Hilfe sehr dankbar.

          MfG

          Zero

          1. hi,

            Tut mir leid das ich da noch nich so ganz hinter steige, aber bin relativ neu euf dem Gebiet und für jede Hilfe sehr dankbar.

            ScriptAlis oder Handler und eine exakte shebang bringen den Apache dazu, Scripts auszuführen, wie auch Struppi schrieb.

            Klick nochmal weiter oben auf meinen Post mit den Beispielen zum virtual Host, das musst Du nur noch verzeichnismäßig anpassen.

            Hotti

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
            1. Danke @ all,

              nun klappt es. Allerdings kann folgendes kurzes Script nicht wiedergegeben werden:

              #!/Perl/bin/perl.exe
              print "Hallo Welt\n";

              In dem error-log steht folgendes dazu:

              [Tue Jan 13 11:55:09 2009] [error] [client 127.0.0.1] malformed header from script. Bad header=Hallo Welt: hallowelt.pl

              Wäre nett wenn ihr mir erklärt, was an diesem Script falsch ist.

              Zero

              1. Allerdings kann folgendes kurzes Script nicht wiedergegeben werden:

                #!/Perl/bin/perl.exe
                print "Hallo Welt\n";

                In dem error-log steht folgendes dazu:

                [Tue Jan 13 11:55:09 2009] [error] [client 127.0.0.1] malformed header from script. Bad header=Hallo Welt: hallowelt.pl

                Wäre nett wenn ihr mir erklärt, was an diesem Script falsch ist.

                Apache beklagt sich, dass du ihm keinen Header gesendet hast.
                Ein header ist die erste Sektion des Outputs, der durch die Zeichenfolge "\n\n" abgeschlossen wird. Typischer Inhalt des Headers ist eine Content-type Angabe.

                mfg Beat

                --
                Woran ich arbeite:
                X-Torah
                ><o(((°>           ><o(((°>
                   <°)))o><                     ><o(((°>o
              2. [Tue Jan 13 11:55:09 2009] [error] [client 127.0.0.1] malformed header from script. Bad header=Hallo Welt: hallowelt.pl

                Wäre nett wenn ihr mir erklärt, was an diesem Script falsch ist.

                wieso hast du den Header aus deinem Orginalskript rausgeschmissen?

                Struppi.