Saadat: Absoluter Pfad des relativen Links

Hallo Allerseits,

wie kann ich mittels PHP den absoluten Pfad eines relativen Links ausgehend vom absoluten Pfad der Datei, in der dieser Link steht, zurückgeben.

Der absolute Pfad der HTML-Datei lautet zum Beispiel:
"D:\www\mypage\referenz\index.html"

Und der in dieser Datei stehende Link lautet:
"../profil/index.html"

Welcher Befehl gibt den absoluten Pfad dieser innerhalb des Links definierten Datei zurück. Der Befehl "realpath();" geht anscheinend immer vom Pfad des PHP-Scripts aus, in dem der Befehl drin steht.

Danke im Voraus!

Gruß

Saadat

  1. Huhu Saadat

    das sollte klappen wenn Du dir den aktuellen Pfad besorgst.

    Z.B.
    $rel_link='../mydir/index.html';
    $this_dir=dirname($PHP_SELF);

    dann den rel-Link anhängst und das dann mit realpath auswertest.

    $path=realpath($this_dir.$rel_link);

    Viele Grüße

    lulu

  2. Hi,

    wie kann ich mittels PHP den absoluten Pfad eines relativen
    Links ausgehend vom absoluten Pfad der Datei, in der dieser
    Link steht, zurückgeben.

    im Allgemeinen - überhaupt nicht.

    Gängige Webserver sind in der Lage, beliebig konfigurierbare Abbildungen zwischen URLs und Pfaden vorzunehmen.

    Du müßtest also deren Konfiguration komplett einlesen - und verstehen ...

    Viele Grüße
          Michael

    1. Moin,

      im Allgemeinen - überhaupt nicht.

      Hat der OP gesagt, dass er von URL-Pfaden ausgehend die darunterliegenden Dateisystempfade haben will? Ich glaube nicht, es dürfte ihm ausreichen innerhalb der URL-Pfade zu bleiben.

      realpath() ist je nach Verwendungszweck leider manchmal nicht brauchbar da es nur auf existierenden Verzeichnissen arbeiten kann. Ich habe daher für ein eigenes Projekt eine Funktion geschrieben die etwas ähnliches macht:

      function dir_concat($dir1, $dir2)
      {
       if(substr($dir1, -1) == "/") $dir = $dir1.$dir2;  // Die beiden Namen verknüpfen
       else $dir = dirname($dir1)."/".$dir2;
       $parts = preg_split("!/!", $dir); // In einzelne Pfadbestandteile aufteilen
       $newparts = Array(); // Hier kommen die neuen Bestandteile rein
       foreach($parts as $part) {
        if($part == "" || $part == ".") { // leere Teile und . ignorieren
         continue;
        } else if($part == "..") { // Eine Ebene nach oben
         if(count($newparts) > 0) array_pop($newparts);
         else die("Zu viele Rückreferenzen");
        } else array_push($newparts, $part); // Diesen Bestandteil merken
       }
       $newdir = implode("/", $newparts); // Neuen Namen bilden
       if($dir[0] == "/") $newdir = "/".$newdir; // Wenn $dir mit einem / angefangen hat, dann wäre der jetzt weg
       if(substr($dir, -1) == "/") $newdir .= "/"; // dito fürs Ende
       return $newdir;
      }

      Du schmeisst der Funktion den ersten und den zweiten Namen an den Kopf und es gibt dir die Verbindung der beiden zurück und entfernt nebenbei alle ../ Rückreferenzen.

      --
      Henryk Plötz
      Grüße von der Ostsee