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 sein realpath
  • -f, --canonicalize: wie -e, außer dass die letzte Komponente nicht existieren muss
  • -m, --canonicalize-missing: verhält sich wie dem Python sein realpath

 

Fazit: Typisch GNU-Betriebssystem – es macht (nur) das, was es machen soll.

Alexander Klimov

Autor: Alexander Aleksandrovič Klimov

Alexander hat Ende 2013 mit einem Praktikum bei NETWAYS gestartet. Als leidenschaftlicher Programmierer und begeisterter Anhänger der Idee freier Software, hat er sich dabei innerhalb kürzester Zeit in die Herzen seiner Kollegen im Development geschlichen. Wäre nicht ausgerechnet Gandhi sein Vorbild, würde er von dort aus daran arbeiten, seinen geheimen Plan, erst die Abteilung und dann die Weltherrschaft an sich zu reißen, zu realisieren - tut er aber nicht. Stattdessen beschreitet er mit der Arbeit an Icinga Web 2 und seiner Ausbildung bei uns friedliche Wege.