» 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: 50779
Chats: 11159
Wohnort: Lohmar


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 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
906
08.08.2012, 15:06
Electric
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
412
17.06.2015, 16:16
Hennessy*19*
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
208
18.07.2008, 11:08
Chris 1985
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
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.759
06.02.2008, 19:15
HeG
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
850
13.04.2008, 12:43
civic_mc2
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 einem EJ6, günstiger?
Hi leutz.. Ich bin stolzer besitzer eines EJ6. Von tag zu tag wächst er mir mehr ans herz jedoch bin ich zu dem entschluss gekommen ihn zu verkaufen weil mir 1700 Euro versicherung das doch zu viel ist. So ist es ja ein klasse auto aber dann säuft...
von Nikkay
18
786
11.10.2007, 09:29
Nikkay
Alternative zu Auxmoney & Smava?
Alternativen gibt es eigentlich keine. Die Auxmoney Alternative schlechthin ist Smava. Andersherum kann man das nur sagen, wenn man bei Smava abgelehnt wurde. Smava ist grundsätzlich zu empfehlen. Für Anleger nicht mehr so attraktiv wie zu Anfang...
von mgutt
0
1.199
15.10.2011, 09:10
mgutt
© 2004 - 2016 www.programmierer-forum.de | Communities | Impressum |