» Aktuelles Verzeichnis - Alternative zu dirname()

Multiple INSERT mit PDONeuen Thread eröffnenNeue Antwort erstellen<base href> aus HTML-Quelltext auslesen
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 50601
Chats: 11159
Wohnort: Hennef


Meine eBay-Auktionen:
19.03.2015, 15:55
zitieren

Mit der Funktion dirname() bekommt man meist mehr Probleme, als man lösen möchte, wenn man sie auf URLs anwendet, wofür die Funktion auch nicht gedacht ist.

Daher habe ich die folgende Funktion realisiert:
function currentdir($url) {
// remove query
if ($first_query = strpos($url, '?')) $url = substr($url, 0, $first_query);
// remove fragment
if ($first_fragment = strpos($url, '#')) $url = substr($url, 0, $first_fragment);
// obtain details
$len = strlen($url);
$last_slash = strrpos($url, '/');
// nothing to do
if ($last_slash === $len) {
return $url;
}
// folder only
// note: "example.com" is only a folder!
if (!$last_slash) {
return '/';
}
// add ending slash to "http://example.com"
if (($first_colon = strpos($url, '://')) !== false && $first_colon + 2 == $last_slash) {
$last_slash = $len;
$url .= '/';
}
$url = substr($url, 0, $last_slash + 1);
return resolvepath($url);
}

Auf dieser Basis funktioniert dann auch parentdir().

Notwendig für currentdir() ist noch resolvepath() um URLs mit "../" korrekt aufzulösen.

Und hier ein Test, der die maßgeblichen Unterschiede zeigt:
$urls = array(
'',
'/',
'//',
'///',
'////',
'foo',
'foo/',
'/foo/',
'a.de',
'go://a.de',
'go://a.de/',
'example.com',
'foo/bar#http://example.com/?foo=http://example.com/',
'foo/bar?http://example.com/#http://example.com/',
'foo/bar?url=http://example.com/',
'foo/bar?url=http%3A%2F%2Fexample.com%2',
'http://example.com',
'http://example.com/',
'http://example.com//',
'http://example.com/foo/bar/',
'http://example.com:80/foo',
'example.com:80/foo',
'http://example.com:80/foo/',
'example.com:80/foo/',
'http://example.com:80/foo/bar/',
'example.com:80/foo/bar/',
'http://example.com/foo/bar//',
'http://example.com/foo//bar//',
'http://example.com/foo//bar/',
'http://example.com/foo/bar/index.php',
'http://example.com/foo/bar//index.php',
'http://example.com/foo//bar//index.php',
);
foreach ($urls as $url) {
echo '$url                         ' . (!$url ? '{empty}' : $url) . PHP_EOL;
echo 'dirname($url)                ' . dirname($url) . PHP_EOL;
echo 'currentdir($url)             ' . currentdir($url) . PHP_EOL;
echo 'parentdir(currentdir($url))  ' . parentdir(currentdir($url)) . PHP_EOL;
echo 'parentdir($url)              ' . parentdir($url) . PHP_EOL;
echo 'parentdir(parentdir($url))   ' . parentdir(parentdir($url)) . PHP_EOL . PHP_EOL;
}

$url                         {empty}
dirname($url)               
currentdir($url)             /
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         /
dirname($url)                /
currentdir($url)             /
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         //
dirname($url)                /
currentdir($url)             //
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         ///
dirname($url)                /
currentdir($url)             ///
parentdir(currentdir($url))  //
parentdir($url)              //
parentdir(parentdir($url))   /

$url                         ////
dirname($url)                /
currentdir($url)             ////
parentdir(currentdir($url))  ///
parentdir($url)              ///
parentdir(parentdir($url))   //

$url                         foo
dirname($url)                .
currentdir($url)             /
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         foo/
dirname($url)                .
currentdir($url)             foo/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         /foo/
dirname($url)                /
currentdir($url)             /foo/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         a.de
dirname($url)                .
currentdir($url)             /
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         go://a.de
dirname($url)                go:
currentdir($url)             go://a.de/
parentdir(currentdir($url))  go://a.de/
parentdir($url)              go://a.de/
parentdir(parentdir($url))   go://a.de/

$url                         go://a.de/
dirname($url)                go:
currentdir($url)             go://a.de/
parentdir(currentdir($url))  go://a.de/
parentdir($url)              go://a.de/
parentdir(parentdir($url))   go://a.de/

$url                         example.com
dirname($url)                .
currentdir($url)             /
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         foo/bar#http://example.com/?foo=http://example.com/
dirname($url)                foo/bar#http://example.com/?foo=http:
currentdir($url)             foo/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         foo/bar?http://example.com/#http://example.com/
dirname($url)                foo/bar?http://example.com/#http:
currentdir($url)             foo/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         foo/bar?url=http://example.com/
dirname($url)                foo/bar?url=http:
currentdir($url)             foo/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         foo/bar?url=http%3A%2F%2Fexample.com%2
dirname($url)                foo
currentdir($url)             foo/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         http://example.com
dirname($url)                http:
currentdir($url)             http://example.com/
parentdir(currentdir($url))  http://example.com/
parentdir($url)              http://example.com/
parentdir(parentdir($url))   http://example.com/

$url                         http://example.com/
dirname($url)                http:
currentdir($url)             http://example.com/
parentdir(currentdir($url))  http://example.com/
parentdir($url)              http://example.com/
parentdir(parentdir($url))   http://example.com/

$url                         http://example.com//
dirname($url)                http:
currentdir($url)             http://example.com//
parentdir(currentdir($url))  http://example.com/
parentdir($url)              http://example.com/
parentdir(parentdir($url))   http://example.com/

$url                         http://example.com/foo/bar/
dirname($url)                http://example.com/foo
currentdir($url)             http://example.com/foo/bar/
parentdir(currentdir($url))  http://example.com/foo/
parentdir($url)              http://example.com/foo/
parentdir(parentdir($url))   http://example.com/

$url                         http://example.com:80/foo
dirname($url)                http://example.com:80
currentdir($url)             http://example.com:80/
parentdir(currentdir($url))  http://example.com:80/
parentdir($url)              http://example.com:80/
parentdir(parentdir($url))   http://example.com:80/

$url                         example.com:80/foo
dirname($url)                example.com:80
currentdir($url)             example.com:80/
parentdir(currentdir($url))  /
parentdir($url)              /
parentdir(parentdir($url))   /

$url                         http://example.com:80/foo/
dirname($url)                http://example.com:80
currentdir($url)             http://example.com:80/foo/
parentdir(currentdir($url))  http://example.com:80/
parentdir($url)              http://example.com:80/
parentdir(parentdir($url))   http://example.com:80/

$url                         example.com:80/foo/
dirname($url)                example.com:80
currentdir($url)             example.com:80/foo/
parentdir(currentdir($url))  example.com:80/
parentdir($url)              example.com:80/
parentdir(parentdir($url))   /

$url                         http://example.com:80/foo/bar/
dirname($url)                http://example.com:80/foo
currentdir($url)             http://example.com:80/foo/bar/
parentdir(currentdir($url))  http://example.com:80/foo/
parentdir($url)              http://example.com:80/foo/
parentdir(parentdir($url))   http://example.com:80/

$url                         example.com:80/foo/bar/
dirname($url)                example.com:80/foo
currentdir($url)             example.com:80/foo/bar/
parentdir(currentdir($url))  example.com:80/foo/
parentdir($url)              example.com:80/foo/
parentdir(parentdir($url))   example.com:80/

$url                         http://example.com/foo/bar//
dirname($url)                http://example.com/foo
currentdir($url)             http://example.com/foo/bar//
parentdir(currentdir($url))  http://example.com/foo/bar/
parentdir($url)              http://example.com/foo/bar/
parentdir(parentdir($url))   http://example.com/foo/

$url                         http://example.com/foo//bar//
dirname($url)                http://example.com/foo
currentdir($url)             http://example.com/foo//bar//
parentdir(currentdir($url))  http://example.com/foo//bar/
parentdir($url)              http://example.com/foo//bar/
parentdir(parentdir($url))   http://example.com/foo//

$url                         http://example.com/foo//bar/
dirname($url)                http://example.com/foo
currentdir($url)             http://example.com/foo//bar/
parentdir(currentdir($url))  http://example.com/foo//
parentdir($url)              http://example.com/foo//
parentdir(parentdir($url))   http://example.com/foo/

$url                         http://example.com/foo/bar/index.php
dirname($url)                http://example.com/foo/bar
currentdir($url)             http://example.com/foo/bar/
parentdir(currentdir($url))  http://example.com/foo/
parentdir($url)              http://example.com/foo/
parentdir(parentdir($url))   http://example.com/

$url                         http://example.com/foo/bar//index.php
dirname($url)                http://example.com/foo/bar
currentdir($url)             http://example.com/foo/bar//
parentdir(currentdir($url))  http://example.com/foo/bar/
parentdir($url)              http://example.com/foo/bar/
parentdir(parentdir($url))   http://example.com/foo/

$url                         http://example.com/foo//bar//index.php
dirname($url)                http://example.com/foo//bar
currentdir($url)             http://example.com/foo//bar//
parentdir(currentdir($url))  http://example.com/foo//bar/
parentdir($url)              http://example.com/foo//bar/
parentdir(parentdir($url))   http://example.com/foo//

Wie man sieht hat dirname() Probleme mit leerem Input, Hostnamen ohne Schrägstrich, mehrfachen Schrägstrichen usw. die ich glücklicherweise mit meiner Funktion lösen konnte.

Ich habe mich bewusst dafür entschieden mehrfache Schrägstriche nicht zu säubern, weil das zu unerwünschten Ergebnissen führen kann. Wer die nicht haben möchte, sollte sie bereits vorher säubern.


pn email
Gast 
19.03.2015, 15:55
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Aktuelles Verzeichnis - Alternative zu dirname()" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Alternative zu RHD
Mahlzeit. Hat jemand Erfahrungen mit anderen Firmen zwecks Sondereintragungen gemacht? RHD ist zwar anscheinend die erste Anlaufstelle bei unmöglichen Sachen, aber muss doch sicher noch andere Firmen geben, wo es hieb und stichfeste Eintragungen...
von Matze B
13
404
17.06.2015, 16:16
Hennessy*19*
Alternative zu EJ9?
Gibts eurer Meinung/Erfahrung nach Gebrauchtwagen bis 5000&euro; die man als echte Alternative zum Ej9 bezeichnen kann? Das heißt im Klartext: -Verbrauch unter 7l auch wenn mans gelegentlich krachen lässt -hohe Zuverlässigkeit -Steuer und...
von DeeLoc
37
899
08.08.2012, 15:06
Electric
Alternative zu Outlook
Hallo Zusammen, ich bin nun ca. sieben Jahre mit normalen Webmail-Programmen klar gekommen. Aber mittlerweile habe ich mehrere Email-Adressen sowohl privat als auch geschäftlich zu verwalten. Dazu kommt, dass ich mit der Zeit auch mal den einen oder...
von Chris 1985
5
203
18.07.2008, 11:08
Chris 1985
MB alternative zu EJ6 ???
Also ich bin ja schon seit ewig auf der suche nach einen ej6, aber das passende zu finden ist echt verdammt schwer und ich verliere langsam die lust. Ich habe jetzt auch mal nach anderen modelen gesucht und habe da einen MB (1 glaube ich) gefunden. Der...
von Godsmack
23
845
13.04.2008, 12:43
civic_mc2
kostengünstige Alternative zu Schleifen...
Hi Leute, wusste jetzt nicht in welchen Bereich ich die Frage am besten stelle, undzwar habe vor demnächst für meine Winterreifen die Radkappen komplett zu schleifen und lackieren. Ich möchte komplett alle Lackrückstände entfernen, es gibt aber viele...
von Civic EG3 Felix
11
416
05.10.2009, 08:26
Ej2 VTi
Turboumbau Alternative zu BHT??
Morgen! Spiele jetzt ernsthaft mit dem Gedanken mein EG4 umrüsten zulassen wie es BH-T anbietet. Nur leider müsste ich dafür sehr weit reisen. Kennt einer eine gute Alternative im Raum NRW oder...
von Casiopire
5
1.735
06.02.2008, 19:15
HeG
alternative zu supersprint msd
wollte mir diese woche einen msd von supersprint zulegen aber dann stellte sich heraus, dass die keine mehr bauen für den itr :wall: kennt jemand alternativen zu supersprint? vll sogar mit mit abe oder sowas ich kenne nur noch t1r aber ich möchte...
von Ruffneck
3
185
11.10.2010, 10:24
dc2-r
alternative zu Benzin gesucht
Hallo Leute. habe einen CM1 BJ 03 und bin auf der suche nach einer alternative zum Super Benzin. Ich fahre etwa 40-45tkm im jahr. Jetzt bitte nicht die Kommentare dan leg dir nen Diesel zu, nein das möcht ich nicht ich mag halt Benziner. Bei...
von Frosch2
4
219
10.12.2010, 14:24
r4Th
Alternative Turboumbau zu BHT,MKR?
Hallo, ich spiele mit dem Gedanken meinen eg2 auf Turbo umbauen zu lassen. Ich weiß nur nicht wo, habe bei BHT eine Anfrage gemacht, die sind aber bis Januar 2012 ausgebucht und in der Suche habe ich was von ich glaub MKR hieß es gefunden, die...
von TheBlackRacer
4
872
09.04.2011, 09:36
Marauder
 Alternative zu MySQLDumper und phpMyAdmin
Ich persönlich mag es nicht extra MySQLDumper zu installieren, wenn phpMyAdmin nicht mehr mitspielt. Durch Zufall bin ich nun darüber gestolpert, dass mein MySQL Programm Navicat einen HTTP Tunnel mitbringt. D.h. im Programmverzeichnis ist eine...
[PHP]von mgutt
0
179
27.01.2015, 19:52
mgutt
© 2004 - 2016 www.programmierer-forum.de | Communities | Impressum |