Es war einmal ein PHP-Skript…
Es sollte – nach einer Modifikation durch meine Wenigkeit –, um seine eigentliche Aufgabe bewerkstelligen zu können, (unter anderem) den absoluten Pfad zu einer Datei ermitteln können.
Welche Funktion der PHP Standard-Bibliothek wäre dafür besser geeignet, als realpath
?
Leider keine.
realpath
hat (nämlich) eine Macke (die auch im PHP-Handbuch vermerkt ist):
realpath() gibt FALSE zurück, wenn ein Fehler auftritt, beispielsweise wenn die Datei nicht existiert.
Warum um alles in der Welt prüft realpath
(immer), ob der Pfad existiert (und schlägt fehl, wenn dem nicht so ist)?
Dafür gibt es doch die Funktion file_exists
.
Außerdem widerspricht dieses Verhalten grundlegend der Unix-Philosophie:
Mache nur eine Sache und mache sie gut.
Python beispielsweise verhält sich da besser; seine Standard-Bibliothek ihre Funktion realpath
zeigt das oben aufgeführte Fehlverhalten nicht und überlässt es dem Benutzer ob bzw. wann oder wie er prüft, ob der Pfad existiert.
readlink
aus den GNU coreutils hingegen geht einen Kompromiss zu Gunsten des Benutzers ein; es lässt ihn einstellen, ob bzw. wie genau die Existenz des Pfades geprüft werden soll:
-e
,--canonicalize-existing
: verhält sich wie dem PHP seinrealpath
-f
,--canonicalize
: wie-e
, außer dass die letzte Komponente nicht existieren muss-m
,--canonicalize-missing
: verhält sich wie dem Python seinrealpath
Fazit: Typisch GNU-Betriebssystem – es macht (nur) das, was es machen soll.
0 Kommentare