Kai345: Konfiguration: root je nach virtualhost

[latex]Mae  govannen![/latex]

Ich stehe anscheinend gerade ziemlich auf dem Schlauch bezüglich der lokalen Konfiguration von PHP unter Windows.
Ich habe für meinem lokalen Apache diverse virtual hosts definiert, das funktioniert auch.

Nun möchte ich, daß PHP(cgi) den für den jeweiligen virtual host zuständigen Pfad (den, der mit DocumentRoot in http-vhosts.conf gesetzt ist) als root-path für "/" ansieht.

Wenn ich also z.B. für http://test.home den Pfad D:\htdocs\test\ definiert habe, soll genau dieser Pfad auch von PHP als Root-Pfad gelten.

Im Moment gibt mir PHP bei echo realpath("/"); immer D:\ aus.

Wo muß ich schrauben, um das Gewünschte zu erreichen?

Cü,

Kai

--
YouTube Video-Tipp: Harmonic Curves
YouTube Video-Tipp: Pipe Dreams
selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
  1. Wo muß ich schrauben, um das Gewünschte zu erreichen?

    Ich kann mich jetzt zwar irren, aber meines Wissens ist das nicht machbar. Wenn das ginge, hätten das so Massenhoster wie Lycos/Tripod sicher auch gemacht, dann könnten sie sich die FAQ Sparen wie die User zu ihrem Root-Verzeichnis kommen.
    Setz open_basedir korrekt, damit PHP nur im Docroot aktiv werden kann, und gut ist's ;)

    Gruß,
    Andreas

    1. [latex]Mae  govannen![/latex]

      Setz open_basedir korrekt, damit PHP nur im Docroot aktiv werden kann, und gut ist's ;)

      Damit beschränke ich nur die Erlaubnis des Zugriffs. Da mit "/datei" weiterhin auf "D:\datei" zugegriffen wird (versucht), erzeugt das lediglich eine Warnung, daß der versuchte Zugriff ausserhalb des erlaubten Pfades liegt.

      Aber ich hab das Problem jetzt dadurch umgangen, daß ich doc_root in der php.ini gar nicht mehr setze und mittels ltrim den führenden slash wegoperieren lasse.

      Cü,

      Kai

      --
      YouTube Video-Tipp: Harmonic Curves
      YouTube Video-Tipp: Pipe Dreams
      selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
      1. Aber ich hab das Problem jetzt dadurch umgangen, daß ich doc_root in der php.ini gar nicht mehr setze und mittels ltrim den führenden slash wegoperieren lasse.

        Von was? Du hättest auch gleich sagen können, dass es dir um eine Benutzereingabe und nicht um allg. im Quelltext auftauchende Pfadangaben geht... Benutzereingaben sind hier was völlig anderes und müssen natürlich entsprechend validiert werden.

        Gruß,
        Andreas

        1. [latex]Mae  govannen![/latex]

          Aber ich hab das Problem jetzt dadurch umgangen, daß ich doc_root in der php.ini gar nicht mehr setze und mittels ltrim den führenden slash wegoperieren lasse.

          Von was? Du hättest auch gleich sagen können, dass es dir um eine Benutzereingabe und nicht um allg. im Quelltext auftauchende Pfadangaben geht... Benutzereingaben sind hier was völlig anderes und müssen natürlich entsprechend validiert werden.

          Hö? Welche Benutzereingaben sollen das bitte sein? Davon habe ich nie ein Wort gesagt.

          Es geht um Pfade zu Dateien. Genauer gesagt, um Pfade, die ich aus einer bestimmten Datei auslese und bisher als src- bzw. href -Attribut im HTML-Kontext nutze. Diese Pfade liegen deshalb im Schema "/pfad/pfad/datei.extension" vor. Allerdings wollte ich nun mit diesen Dateien auch etwas unter PHP erledigen und stieß durch die je nach vhost verschiedenen Verzeichnisse auf das angesprochene Problem und bin von einem Problem bei der php-Konfiguration ausgegangen.

          Cü,

          Kai

          --
          YouTube Video-Tipp: Harmonic Curves
          YouTube Video-Tipp: Pipe Dreams
          selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
          1. Hö? Welche Benutzereingaben sollen das bitte sein? Davon habe ich nie ein Wort gesagt.

            Das Problem ist ja, dass du kein Wort gesagt hast ;)

            Es geht um Pfade zu Dateien. Genauer gesagt, um Pfade, die ich aus einer bestimmten Datei auslese und bisher als src- bzw. href -Attribut im HTML-Kontext nutze. Diese Pfade liegen deshalb im Schema "/pfad/pfad/datei.extension" vor. Allerdings wollte ich nun mit diesen Dateien auch etwas unter PHP erledigen und stieß durch die je nach vhost verschiedenen Verzeichnisse auf das angesprochene Problem und bin von einem Problem bei der php-Konfiguration ausgegangen.

            Nun, dass Pfade einer URL nicht identisch zum realen Dateisystem sind, dürft dir doch schon aufgrund der Tatsache dass vHosts existieren klar sein.
            Aber es ist doch ein Leichtes den Pfad so zu bearbeiten, dass er relativ zum Docroot ist - irgendwie so wirst es ja auch geschafft haben ;)

            Gruß,
            Andreas

          2. Hi Kai345,

            Es geht um Pfade zu Dateien. Genauer gesagt, um Pfade, die ich aus einer bestimmten Datei auslese und bisher als src- bzw. href -Attribut im HTML-Kontext nutze. Diese Pfade liegen deshalb im Schema "/pfad/pfad/datei.extension" vor. Allerdings wollte ich nun mit diesen Dateien auch etwas unter PHP erledigen und stieß durch die je nach vhost verschiedenen Verzeichnisse auf das angesprochene Problem und bin von einem Problem bei der php-Konfiguration ausgegangen.

            $path = $_SERVER['DOCUMENT_ROOT'] . $href;

            Das ist die von dir gewünschte absolute Adressierung, einfach vor den Wert den DOCUMENT_ROOT davorhängen. Dass du für eine relative Adressierung den führenden Slash entfernen kannst, hast du ja selber schon festgestellt. ;-)

            Viele Grüße,
              ~ Dennis.

  2. echo $begrüßung;

    Ich habe für meinem lokalen Apache diverse virtual hosts definiert, das funktioniert auch.
    Nun möchte ich, daß PHP(cgi) den für den jeweiligen virtual host zuständigen Pfad (den, der mit DocumentRoot in http-vhosts.conf gesetzt ist) als root-path für "/" ansieht.

    Das ist nicht unbedingt eine besonders clevere Idee. Es empfiehlt sich immer, einen Bereich außerhalb des DocumentRoot zur Verfügung zu haben, um dort Dat(ei)en abzulegen, die nicht oder nicht direkt über das Web erreichbar sein sollen, Zugangsdaten, Template-Dateien oder Funktionsbibliotheken beispielsweise.

    Wenn ich also z.B. für http://test.home den Pfad D:\htdocs\test\ definiert habe, soll genau dieser Pfad auch von PHP als Root-Pfad gelten.

    Arbeite mit dem bereits empfohlenen open_basedir, lass das aber auf das Projektverzeichnis zeigen. Unterhalb dessen liegt dann ein Verzeichnis, auf das das DocumentRoot zeigt. open_basedir wirkt aber nur auf die PHP-Funktionen. Du solltest dann auch noch die Verwendung von Program execution und anderen verhindern, mit denen man am open_basedir vorbei arbeiten kann.

    Vielleicht ist es auch die include_path-Direktive, die du eigentlich suchst.

    echo "$verabschiedung $name";

  3. Hello,

    Ich habe für meinem lokalen Apache diverse virtual hosts definiert, das funktioniert auch.

    Dann sollte es Dir auch möglich sein, eine chroot-Umgebung einzurichten bzw. suexec zu benutzen http://httpd.apache.org/docs/1.3/suexec.html

    Für Windows heißt das passende Programm mMn 'runas'. Musst Du mal nach "suexec for windows" googlen, es ist schon zu lange her, dass ich damit mal gespielt habe.

    Übrigens:
    Wer virtual Hosts eirichten kann bzw. muss, hat sicherlich auch eine (alte) Maschine für ein Linux übrig ;-)

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de