Henryk Plötz: Absoluter Pfad des relativen Links

Beitrag lesen

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