aktuelles Verzeichnis rausbekommen
Sven
- php
0 Sönke Tesch0 Sven0 Sönke Tesch0 Sven
moin,
hört sich sehr simpel an, aber irgendwie will es nicht.
wenn beispielsweise gerade
http://www.mein-server.de/bla/blo/blu/datei.php
aufgerufen wird, will ich gerne "/bla/blo/blu/" in einen String laden. Mehr nicht.
dirname($_SERVER["REQUESTED_URI"]) müsste ja eigentlich helfen. Tud es aber nicht. Denn wenn ich z.B. /ordner1/ordner2 aufrufe, gibt es nur "/ordner1" zurück (oder vergleichbares).
Es gibt ja allgemein gesehen 3 Möglichkeiten:
/ordner1/ordner2
/ordner1/ordner2/
/ordner1/ordner2/datei.endung
Das Problem hierbei ist, dass die erste Möglichkeit Probleme macht. Wie könnte man das umgehen?
Gruß,
Sven
dirname($_SERVER["REQUESTED_URI"]) müsste ja eigentlich helfen. Tud es aber nicht. Denn wenn ich z.B. /ordner1/ordner2 aufrufe, gibt es nur "/ordner1" zurück (oder vergleichbares).
Logisch, dirname() gibt das Verzeichnis zurück. /ordner1/ordner2 gibt es in dem Sinne nicht, ordner2 ist bei dieser Syntax eine Datei.
Du dokterst also eigentlich am Symptom herum, das Problem steckt eher woanders: Wieso wird Dein Skript mit einer URL aufgerufen, die einen Ordner als Datei bezeichnet? In diesem Falle wird normalerweise vom Webserver grundsätzlich _erstmal_ auf die korrekte URL /ordner1/ordner2/ umgeleitet. Dann _anschließend_ wird die Standarddatei /ordner1/ordner2/index.bla (hier: Dein Skript index.php) aufgerufen (mit der korrekten URL /ordner1/ordner2/).
Könntest Du das näher erläutern, kann man sich das irgendwo anschauen?
Gruß,
soenk.e
Moin Sönke,
Logisch, dirname() gibt das Verzeichnis zurück. /ordner1/ordner2 gibt es in dem Sinne nicht, ordner2 ist bei dieser Syntax eine Datei.
ja. Aber auch bei /ordner1/ordner2/ handelt dirname() nicht so, wie es handeln sollte.
Du dokterst also eigentlich am Symptom herum, das Problem steckt eher woanders: Wieso wird Dein Skript mit einer URL aufgerufen, die einen Ordner als Datei bezeichnet? In diesem Falle wird normalerweise vom Webserver grundsätzlich _erstmal_ auf die korrekte URL /ordner1/ordner2/ umgeleitet. Dann _anschließend_ wird die Standarddatei /ordner1/ordner2/index.bla (hier: Dein Skript index.php) aufgerufen (mit der korrekten URL /ordner1/ordner2/).
also, das Hauptproblem steckt eigentlich darin, dass ich viel mit mod_rewrite rum"mache", und hierbei redirectet der apache nicht direkt auf die "korrekte" URL /ordner1/ordner2/ um, wenn man /ordner1/ordner2 aufruft. Und selbst wenn er das tun würde - dank dem Phänomen, dass /ordner1/ordner2/ auch nicht funktioniert (das tut es erst, wenn danach ein dateiname steht), bringt's nix.
bei /ordner1/ordner2/ könnte man jedoch dann schauen, ob das letzte zeichen ein "/" ist (substr("...", -1)) und dann einfach eine "datei" dranstecken (dann wird daraus /ornder1/ordner2/datei.dat) und dann müsste es funktinoieren.
Das Problem liegt also im Moment bei Mod_rewrite.
Gruß,
Sven
Logisch, dirname() gibt das Verzeichnis zurück. /ordner1/ordner2 gibt es in dem Sinne nicht, ordner2 ist bei dieser Syntax eine Datei.
ja. Aber auch bei /ordner1/ordner2/ handelt dirname() nicht so, wie es handeln sollte.
Oh, wie gemein :] Wenn alles nichts hilft, helfen Muster:
$reg = "/[1]*(.*)/[^/]*$/i";
$x = "/a/b";
preg_match($reg, $x, $y); echo $x . " = " . $y[1] . "\n";
$x = "/a/b/";
preg_match($reg, $x, $y); echo $x . " = " . $y[1] . "\n";
$x = "/a/b/c.txt";
preg_match($reg, $x, $y); echo $x . " = " . $y[1] . "\n";
Das Skript ergibt folgend Ausgabe:
/a/b = /a
/a/b/ = /a/b
/a/b/c.txt = /a/b
Ich denke, dass wolltest Du haben.
Gruß,
soenk.e
^/ ↩︎
Hallo Sönke,
Logisch, dirname() gibt das Verzeichnis zurück. /ordner1/ordner2 gibt es in dem Sinne nicht, ordner2 ist bei dieser Syntax eine Datei.
ja. Aber auch bei /ordner1/ordner2/ handelt dirname() nicht so, wie es handeln sollte.
Oh, wie gemein :]
genau :)
Wenn alles nichts hilft, helfen Muster:
Pattern, oder wie? ;) - regex heißt das Stichwort ;)
/a/b = /a
/a/b/ = /a/b
/a/b/c.txt = /a/b
Ich denke, dass wolltest Du haben.
Nein. Ich hätte gerne
/a/b = /a/b
/a/b/ = /a/b
/a/b/c.txt = /a/b
:]
Gruß,
Sven
/a/b = /a
/a/b/ = /a/b
/a/b/c.txt = /a/b
Ich denke, dass wolltest Du haben.Nein. Ich hätte gerne
/a/b = /a/b
/a/b/ = /a/b
/a/b/c.txt = /a/b
Stimmt. Wäre wohl doch am schlauesten, wenn Du kurzerhand quasi von Hand prüfst, ob der letzte Teil (Ende bis Schrägstrich) entweder nur aus dem Schrägstrich besteht oder einen Punkt enthält und falls ja, diesen Teil abschneidest. Also in etwa
if ((strrpos($url, ".") > ($p = strrpos($url, "/"))) || ($p == strlen($url)-1)) {
$url = substr($url, 0, $p);
}
Oder alternativ das Dateisystem befragen, isdir() oder sowas in der Art müsste das sein.
Gruß,
soenk.e