Absoluter Pfad des relativen Links
Saadat
- php
0 lulu0 Michael Schröpl
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
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
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
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