phpbar.de logo

Mailinglisten-Archive

[php] Relativen Dateipfad ermitteln

[php] Relativen Dateipfad ermitteln

Lutz Zetzsche php at sea-rescue.de
Mit Okt 15 12:29:15 CEST 2003


Hi Thomas,

Zitat von Thomas Langfeld <opa.thomas at fhtw-berlin.de>:

> folgendes:
>
> Wir haben ein Skript:
> /var/www/foo/bar/dummy.php
>
> Dann gibt es eine Datei unter:
> /var/www/upload/fubar/file.doc
>
> Jetzt wird der RELATIVE Pfad von dummy.php zu file.doc benötigt.
>
> In diesem Fall ist das
> ../../upload/fubar/file.doc
>
> Soweit kein Problem.
> Nur kann dummy.php auch unter
>
> /var/www/foo/bar/XYZ/dummy.php
>
> liegen, womit der relative Pfad zu
>
> ../../../upload/fubar/file.doc
>
> wird.
>
> Jetzt benötige eine Vorgehensweise, um diesen relativen Pfad immer korrekt
> zu ermitteln.
> Stehe auf dem Schlauch, weil mir fällt dazu irgendwie nix ein. :-(

ist das nicht ein klassischer Fall, wo sinnvollerweise ein ABSOLUTER Pfad
verwendet werden sollte? ;-) Das Upload/Download-Verzeichnis scheint doch immer
an derselben Stelle zu liegen. Dann musst Du nicht die ganzen Verrenkungen
ausfuehren, um einen relativen Pfad zu ermitteln.

Wenn Du aber drauf bestehst, gibt es mehrere Moeglichkeiten das zu tun. :-) Von
der Logik her musst Du das "/var/www/" von Deinem physischen Pfad, z.B.
/var/www/foo/bar/dummy.php, entfernen und dann alle verbleibenden "xyz/" durch
ein "../" zu ersetzen. Z.B. so:

$sDeinPfad  = '/var/www/foo/bar/dummy.php';
$aPfadArray = explode ('/', $sDeinPfad);
$iAnzahlElemente = count($aPfadArray);
$iAnzahlRelVerz  = AnzahlElemente - 3;
$sDeinRelPfad    = '';
for ($i=0; $i<$iAnzahlRelVerz; $i++) {
  $sDeinRelPfad .= '../';
}
$sDeinRelPfad .= $aPfadArray[$iAnzahlElemente-1];

So in etwa. UNGETESTET!

Eine andere Variante waere, mit str_replace() erst das "/var/www/" zu entfernen
und dann mit regulaeren Ausdruecken alle uebrigen "xyz/" durch "../" zu
ersetzen. Oder Du machst alles mit regulaeren Ausdruecken. ;-)

Viele Gruesse

Lutz

php::bar PHP Wiki   -   Listenarchive