Mailinglisten-Archive |
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