Thorsten Steffen: perl mit apache unter nt

Hi,
ich brauch dringend mal eure Hilfe:
Ich hab nen apache webserver unter nt und möchte darauf perl integrieren. Hab perl installiert, im apache-conf-file den cgi-bin-Pfad eingetragen und kriege bei jedem script(.pl)-Aufruf folgende Meldung vom apache:
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.
Please contact the server administrator, you@your.address and inform
them of the time the error occurred, and anything you might have done that
may have caused the error.
More information about this error may be available in the server error log.
Apache/1.3.6 Server at avalon.khof.com Port 80

Im apache-error-log steht:
[Wed Jul 14 19:03:31 1999] [error] [client 127.0.0.1] (2)No such file or directory: couldn't spawn child process: e:/www/pizza/test/cgi-bin/hallo.pl

Das script wird von perl ohne Fehler interpretiert, wenn ichs mit dem Interpreter aufrufe, hab auch den interpreter-Pfad im Kopf nicht vergessen: #!/usr/bin/perl

Der Interpreter liegt im Verzeichnis /usr/bin/perl/bin/mswin32-x86, hab ihn auch schon mal nach /usr/bin/perl/bin und /usr/bin/perl kopiert, klappt auch nicht.

Kann mir bitte einer helfen ?
Gruß
Thorsten

  1. Das script wird von perl ohne Fehler interpretiert, wenn ichs mit dem Interpreter aufrufe, hab auch den interpreter-Pfad im Kopf nicht vergessen: #!/usr/bin/perl
    Der Interpreter liegt im Verzeichnis /usr/bin/perl/bin/mswin32-x86, hab ihn auch schon mal nach /usr/bin/perl/bin und /usr/bin/perl kopiert, klappt auch nicht.
    Kann mir bitte einer helfen ?

    Statt den Perl-Interpreter woandershin zu kopieren (wo er möglicherweise gar nicht mehr funktioniert, weil er relativ zu seinem aktuellen Verzeichnis andere Dateien sucht oder weil bestimmte Pfade in ihm während der Installation eingebrannt wurden) solltest Du lieber den Pfad des Perl-Programms in Dein CGI-Skript eintragen.

    Unter NT gibt es noch eine andere Möglichkeit:
    Schreibe nur noch "#!perl" in Dein CGI-Skript und setze den Pfad des Perl-Verzeichnisses in die Environment-Variable PATH - das geht auch (aber nur unter Windows32, nicht unter UNIX).

    1. Das script wird von perl ohne Fehler interpretiert, wenn ichs mit dem Interpreter aufrufe, hab auch den interpreter-Pfad im Kopf nicht vergessen: #!/usr/bin/perl
      Der Interpreter liegt im Verzeichnis /usr/bin/perl/bin/mswin32-x86, hab ihn auch schon mal nach /usr/bin/perl/bin und /usr/bin/perl kopiert, klappt auch nicht.
      Kann mir bitte einer helfen ?

      Statt den Perl-Interpreter woandershin zu kopieren (wo er möglicherweise gar nicht mehr funktioniert, weil er relativ zu seinem aktuellen Verzeichnis andere Dateien sucht oder weil bestimmte Pfade in ihm während der Installation eingebrannt wurden) solltest Du lieber den Pfad des Perl-Programms in Dein CGI-Skript eintragen.

      Unter NT gibt es noch eine andere Möglichkeit:
      Schreibe nur noch "#!perl" in Dein CGI-Skript und setze den Pfad des Perl-Verzeichnisses in die Environment-Variable PATH - das geht auch (aber nur unter Windows32, nicht unter UNIX).

      Puuuhh, danke für die Hilfe, der Abend ist gerettet. Mit #!perl funktionierts; mit dem Pfad des Perlprogrammes (nur Pfad, ohne perl.exe-Angabe) klappts aber nicht.

      Gruß
      Thorsten

      1. Puuuhh, danke für die Hilfe, der Abend ist gerettet. Mit #!perl funktionierts; mit dem Pfad des Perlprogrammes (nur Pfad, ohne perl.exe-Angabe) klappts aber nicht.

        Das ist klar. In Zeile 1 steht das Kommando zum Aufruf des Interpreters - also muß insbesondere auch das Programm angegeben sein. Der Pfad davor ist genau dann notwendig, wenn Windows das Programm nicht auf anderem Wegen, etwa über PATH, finden kann.

        1. Puuuhh, danke für die Hilfe, der Abend ist gerettet. Mit #!perl funktionierts; mit dem Pfad des Perlprogrammes (nur Pfad, ohne perl.exe-Angabe) klappts aber nicht.

          Das ist klar. In Zeile 1 steht das Kommando zum Aufruf des Interpreters - also muß insbesondere auch das Programm angegeben sein. Der Pfad davor ist genau dann notwendig, wenn Windows das Programm nicht auf anderem Wegen, etwa über PATH, finden kann.

          Ja aber die Standardangabe lautet doch #!usr/bin/perl    ??? Da ist doch auch nur das Verzeichnis angegeben.

          1. Hallo Thorsten!

            Ja aber die Standardangabe lautet doch #!usr/bin/perl    ??? Da ist doch auch nur das Verzeichnis angegeben.

            Ich hab mich sowieso schon gewundert, wieso Du diesen Pfad zum Programm eintraegst, denn der ist fuer Windows-NT-Systeme nicht gerade ueblich. Dieser Pfad stammt aus der UNIX-Welt, wo viele kleine und grosse Utilities im Verzeichnis /usr/bin zu finden sind. Laufwerksbuchstaben wie in der Microsoftwelt gibt es dort nicht. Das Programm, dass dort liegt, heisst einfach perl, nicht perl.exe, sondern einfach nur perl. Unter UNIX werden ausfuehrbare Programme nicht an ihrer Dateiendung (.com, .exe) erkannt, sondern an dem/den gesetzten Execute-Bit(s) (auch X-Rechte genannt). Und deshalb ist /usr/bin/perl eben der komplette Pfad inclusive Name der ausfuehrbaren Datei.

            Und jetzt sag mal, hast Du wirklich auf Deiner Festplatte ein Verzeichnis usr, dort ein Verzeichnis bin, und dort die perl.exe, also z.B. C:\usr\bin\perl.exe?

            Calocybe

            1. Ja aber die Standardangabe lautet doch #!usr/bin/perl    ??? Da ist doch auch nur das Verzeichnis angegeben.

              Aber nicht doch ...

              Ich hab mich sowieso schon gewundert, wieso Du diesen Pfad zum Programm eintraegst, denn der ist fuer Windows-NT-Systeme nicht gerade ueblich. Dieser Pfad stammt aus der UNIX-Welt, wo viele kleine und grosse Utilities im Verzeichnis /usr/bin zu finden sind. Laufwerksbuchstaben wie in der Microsoftwelt gibt es dort nicht. Das Programm, dass dort liegt, heisst einfach perl, nicht perl.exe, sondern einfach nur perl. Unter UNIX werden ausfuehrbare Programme nicht an ihrer Dateiendung (.com, .exe) erkannt, sondern an dem/den gesetzten Execute-Bit(s) (auch X-Rechte genannt). Und deshalb ist /usr/bin/perl eben der komplette Pfad inclusive Name der ausfuehrbaren Datei.

              Ganz genau. Die Namensgleichheit hat hier für die Verwirrung gesorgt.

              In Windows gibt es ein Verzeichnis namens irgendwas\perl, das selbst wiederum Dateien und Unterverzeichnisse enthält. Bei meinem ActivePerl hier beispielsweise gibt es ein Programm perl.exe in einem Unterverzeichnis bin des Perl-Installationsverzeichnisses.
              Die Idee dabei ist, daß das ganze Produkt irgendwohin installiert wird und daß dann die Programme daraus entweder durch expliziten Pfadnamen oder durch PATH gefunden werden.

              In UNIX ist das aus Tradition etwas anders. Da will man u. a. aus Performance-Gründen nicht tausend Verzeichnisse in PATH stehen haben, sondern möglichst wenige. Also kippen einige Leute die Programme in einige wenige Verzeichnisse (/usr/bin für Betriebssystemkomponenten, /usr/local/bin für selbst installierte Software usw.). Dabei kann der Rest des Perl-Interpreters ganz woanders stehen - das "Perl"-Kommando selbst ist möglicherweise sogar nur ein Shell-Skript, in welches bei der Installation von Perl die entsprechenden Pfade eingetragen werden.

              Daß es in solchen bin-Verzeichnissen dann irgendwann aussieht wie bei Hempels unterm Sofa, ist natürlich kein Wunder ...
              Meine Methode: Perl irgendwohin installieren und in /usr/local/bin dann nur einen symbolic link auf das Perl-Programm - dann sind alle glücklich ...

            2. Hallo Thorsten!

              Ja aber die Standardangabe lautet doch #!usr/bin/perl    ??? Da ist doch auch nur das Verzeichnis angegeben.

              Ich hab mich sowieso schon gewundert, wieso Du diesen Pfad zum Programm eintraegst, denn der ist fuer Windows-NT-Systeme nicht gerade ueblich. Dieser Pfad stammt aus der UNIX-Welt, wo viele kleine und grosse Utilities im Verzeichnis /usr/bin zu finden sind. Laufwerksbuchstaben wie in der Microsoftwelt gibt es dort nicht. Das Programm, dass dort liegt, heisst einfach perl, nicht perl.exe, sondern einfach nur perl. Unter UNIX werden ausfuehrbare Programme nicht an ihrer Dateiendung (.com, .exe) erkannt, sondern an dem/den gesetzten Execute-Bit(s) (auch X-Rechte genannt). Und deshalb ist /usr/bin/perl eben der komplette Pfad inclusive Name der ausfuehrbaren Datei.

              Und jetzt sag mal, hast Du wirklich auf Deiner Festplatte ein Verzeichnis usr, dort ein Verzeichnis bin, und dort die perl.exe, also z.B. C:\usr\bin\perl.exe?

              Calocybe

              Hab ich angelegt, weil ich ja nicht wußte, wies funktioniert