Aqutes: Falscher Pfad bei perl scripts

Ich habe mir einen Xitami Server installiert, dazu CGI und PHP
Ich hab die Umgebungsvaribalen definiert und PERL und PHP in die Serverkonfiguration geschrieben

das Ausführen ist kein problem

Weiters hab ich noch Virtuelle Hosts errichtet die jeder ein eigenen Ordner besitzen

dort gibt man den relativen pfad zu dem Root verzeichnis an und zum cgi-bin verzeichnis beides hab ich getan

wenn ich jetzt bei einem virtuellen host ein cgi-script aufrufe in dem der code

Code:

opendir(DIR,"./");
while(my $file = readdir DIR) {
  print "DATEI: $file<br>\n";
}
closedir(DIR);

enthalten ist werden alle Dateien im Root des Webservers, also nicht des Virtuellen host angezeigt.

Hat vielleicht einer von euch schon dieses Problem gehabt und wenn ja wie hab ihr es behoben.

  1. hallo aqutes,

    mit der zeile

    opendir(DIR,"./");

    sagst du deinem skript explizit dass es das document root (./) öffnen soll. wenn das skript je nach virtual host ein spezielles verzeichnis öffnen soll musst du es ihm sagen. dazu kannst du in deiner httpd.conf in den jeweiligen <VirtualHost> sektionen mit der direktive setEnv die pfade setzen, also z.b.:

    <VirtualHost xyz>
        DocumentRoot /user/user1
        ...
        setEnv USER_PATH /user/user1
        ...
    </VirtualHost>

    dann solltest du in deinem skript mit

    opendir(DIR,$ENV{USER_PATH});

    drauf zugreifen können.
    hab ich allerdings nicht ausprobiert, also keine garantie.

    gruss aus berlin, volker

    1. ja aber das versteh ich nicht ganz,
      weil bevor ich den computer aufgesetzt habe hatte ich
      das selbe script und alle hat funktioniert

      und außerdem sagt ja ./ aus, dass der pfad der ist wo das script liegt
      sprich in meinem beispiel im cgi-bin ordner

      / root
      ./ selbe ordner
      ../ ein ordner hinauf

      so ist es normalerweise

      1. soviel ich weiss bedeutet './' oder 'root' im webserver-kontext immer document root. das cgi-bin verzeichnis liegt ja nicht ohne grund ausserhalb des document root, man muss unbedingt vermeiden dass clients darauf zugriff haben. die einzige instanz die auf das cgi-bin verzeichnis zugreifen darf ist der webserver selbst.

        gruss aus berlin, volker

      2. ok, wer lesen kann ist klar im vorteil, du benutzt ja gar keinen apachen. wie beim xitami-server die virtual host konfiguration funktioniert weiss ich nicht, keine ahnung ob es da auch sowas wie 'setEnv' gibt. allerdings wird dich dieser server auch nicht auf verzeichnisse ausserhalb des document root zugreifen lassen, deswegen nehme ich an dass auch in deinem fall mit './' document root gemeint ist.

        gruss aus berlin, volker

      3. hallo,

        weil bevor ich den computer aufgesetzt habe hatte ich
        das selbe script und alle hat funktioniert

        Wie dein Script so ganz ohne Computer funktionieren konnte, müßtest du wohl etwas genauer darlegen.

        und außerdem sagt ja ./ aus, dass der pfad der ist wo das script liegt

        Nein, das ist es nicht _ganz_. Und wenn es so wäre, würdest du diese beiden komischen Zeichen doch gar nicht brauchen, weil sie keinen Sinn machen würden  -  tun sie auch tatsächlich nicht wirklich.

        sprich in meinem beispiel im cgi-bin ordner
        / root

        Welche: ServerRoot, DocumentRoot oder root-Verzeichnis des Server-Rechners?

        ./ selbe ordner

        Nicht unbedingt.

        ../ ein ordner hinauf

        Ja, in der Regel.

        Um dein Problem nachvollziehen zu können, müßtest du aber etwas genauer angeben, was du denn an deinem Server wie konfiguriert hast und welches System du fährst.

        Grüße aus Berlin

        Christoph S.

        1. Win 2000
          Xitami Web server

          Standard einstellungen des Xitami Servers:

          Main HTML directory:  ./webpages
          Main CGI directory:  ./cgi-bin
          CGI URLs start with:  /cgi-bin
          Filters: .pl - D:\PERL\bin\perl.exe

          Vitual Host:
          Main HTML directory: ./webpages/test/
          Main CGI directory: ./webpages/test/cgi-bin
          CGI URLs start with:  /cgi-bin
          Filters:

          Wenn ich einen virtuelen host einrichte möchte ich das das Root verzeichnis, das des virtuellen host ist und nicht des standard host

          Sprich es wäre ja ein vergehen wenn benutzer auf andere virtuelle host zugreifen können.

          und deshalb stimmt irgendwas bei meinen einstellungen im xitami nicht

      4. 你好 Aqutes,

        und außerdem sagt ja ./ aus, dass der pfad der ist wo das script liegt
        sprich in meinem beispiel im cgi-bin ordner

        Erstmal steht . fuer das PWD, das Present Working Directory. Und die
        CGI-Schnittstelle definiert nicht, was das PWD sein muss, wenn das CGI-Script
        ausgefuehrt wird. Das ist beim Apachen idR das Verzeichnis, in dem das
        Script liegt, aber das muss nicht so sein. Deshalb solltest du im Kontext
        CGI nie mit relativen, sondern immer mit absoluten Pfadangaben arbeiten.

        再见,
        CK

        --
        Nur die Weisesten und die Dümmsten können sich nicht ändern.