Verzeichnispfad (rekursiv) erstellen
Unglaublich, aber es ist schon wieder Sonntag. Naja eigentlich ist es jetzt gerade Samstag Abend, aber wenn ihr es lest, ist Sonntag. Klingt konfuser, als das was ich sonst so rede oder?
Der heutige Artikel wird einige von euch vielleicht nicht vom Hocker hauen, aber wie meistens Sonntags gibt es Easy-Readening. Aber ich darf hier gar nicht so rumtönen, denn ich habe bis Ende der Woche auch nicht gewusst, wie man am einfachsten ein Verzeichnis mit PHP erstellt, in einem Unterverzeichnis, das bis jetzt auch noch nicht existiert.
Mein erster Ansatz wäre wie folgt gewesen. Nehme den zu erstellenden Pfad, wende ein explode drauf an und hole so die einzelnen Verzeichnisse raus. Darüber wird jetzt iteriert und jedes Verzeichnis, das nicht existiert wird erstellt. Und voilá die Funktion ist fertig. Und so habe ich das auch programmiert. Dabei hätte ich doch einfach mal in die Syntax der mkdir
Befehls von php genauer unter die Lupe nehmen sollen. Dabei gibt es noch ein kleines WTF kostenlos dazu. Auf der deutschen php.net Seite hat mkdir
genau zwei Parameter, den Pfadnamen und den Rechtemodus, den die neuen Dirs bekommen sollen. Wechselt man auf die englische Seite, so hat der Befehl auf einmal vier. Und der dritte davon ist das „recursive flag“. Hiermit bestimmt man, wie PHP in einem solchem Fall reagieren soll. Setzt man es auf true
so werden alle benötigten Verzeichnisse erstellt, ansonsten eben nicht.
Ich weiß, ich sollte mich nicht über eine Dokumentation aufregen, die von freiwilligen erstellt wurde. Ich mach’s aber trotzdem. Schon alleine, weil es so Spaß macht.
Ach was man noch dazu sagen sollte. Diese Funktion gibt es erst seit PHP5. Alle anderen sollten sich an meinen oben beschriebenen Algorithmus halten. Obwohl ich mir ja „sicher“ bin hier keine PHP4 Nutzer unter den Lesern zu haben.
Ach, halb so wild .. ich könnt mich da eher über die Reihenfolge von Needle/Haystack aufregen .. weil, merken lässt sich’s einfach nicht! :/
Lustiger fand ich damals bei der ZCE-Vorbereitung, dass man auf einmal Funktionen entdeckt, die’s schon seit PHP3 bzw den Anfängen von PHP4 gibt und die ich bisher noch nicht ansatzweise vermisst habe – das hat mir schon irgendwie zu denken gegeben *g
Gruss
Steffkes
So manches mal macht die Such nach Problemlösungen einfach mehr Spass als die Suche nach dem richtigen Befehl, nicht wahr?
Hi,
alle, die mit mit der vorgeschlagenen Lösung
>> $dirs = explode( ‚/‘, $path );
das Problem lösen möchten, möchte ich darauf aufmerksam machen, dass es bei Linux auch Pfade mit Front-Slashes geben kann:
$path = ‚/home/timo/my\/path‘;
Nicht schön aber selten! Da man hier natürlich nicht das Verzeichnis „/home/timo/my\“ erzeugen möchte, ist etwas mehr Vorsicht geboten.
Vielleicht mit einer Regular Expression, die nur Front-Slashes ohne vorangehnde Back-Slashes findet? Es gibt immer Spezialfälle, an die man denken sollte.
Sprich: Schaut, dass ihr auf eine aktuelle PHP-Version aktualisiert. Hat noch 1000 andere Vorteile 🙂
Hier kann man dann aber auch vom PHP „define“ profitieren, der da heißt DIRECTORY_SEPARATOR. Sollte man eh verwenden, denke ich doch mal.