Seite wählen

Gut gemeint vs. gut gemacht

von | Jul 31, 2014 | Linux, Development

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
Alexander Klimov
Senior Developer

Alexander hat 2017 seine Ausbildung zum Developer bei NETWAYS erfolgreich abgeschlossen. 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 bei uns friedliche Wege.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Linux | Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...