Letztes Zeichen einer Zeichenkette in PHP: 5 einfache Methoden und häufige Fehler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Create a folder in PHP if it doesn't exist: the evolution of one question



Wenn Sie jemals ein Skript geschrieben haben, das Dateien hochlädt, Cache speichert oder Berichte generiert, sind Sie wahrscheinlich auf die Situation gestoßen: "Aber der Ordner existiert nicht!". Ein Fehler, der das gesamte Skript zum Absturz bringt und den Benutzer mit einem weißen Bildschirm oder (noch schlimmer) einer kryptischen PHP-Fehlermeldung zurücklässt.



Die Frage "Create a folder if it doesn't already exist" auf Stack Overflow sammelt tausende von Aufrufen. Und das aus gutem Grund. Es scheint einfach, oder? Aber der Teufel steckt, wie immer, im Detail: Berechtigungen, Rekursion, Ausnahmebehandlung, Kodierung von Ordnernamen. Im Jahr 2025, da Projekte komplexer und Sicherheitsanforderungen strenger werden, ist die korrekte Verzeichniserstellung eine grundlegende Fähigkeit, die jeder PHP-Entwickler beherrschen muss.



In diesem Artikel behandeln wir 5 Best Practices zum Erstellen eines Ordners in PHP, falls dieser nicht existiert. Von einer einfachen Lösung für Anfänger bis hin zu produktionsreifem Code mit Schutz vor Race Conditions. Los geht's!



Warum einfaches mkdir() schlecht ist? (eine Geschichte über einen Fehler)



Am Anfang schreiben viele dies:



<?phpmkdir('/path/to/my/folder');?>


Und erhalten:



  • Warning: mkdir(): No such file or directory — wenn der übergeordnete Ordner nicht existiert.
  • Warning: mkdir(): File exists — wenn der Ordner bereits existiert.


Beide Warnungen sind nicht nur "gelber Text". Im Produktionsmodus können sie zu fatalen Fehlern werden, wenn die strenge Fehlerberichterstattung aktiviert ist. Es ist auch ein Sicherheitsloch: Ein Angreifer könnte einen Ordner mit demselben Namen erstellen, bevor Ihr Skript dies tut (Race Condition).



Daher beinhaltet der moderne Ansatz immer die Überprüfung, Rekursion und Berechtigungskontrolle.



Methode 1: Klassisch mit is_dir() und mkdir() (für Anfänger)



Der einfachste und verständlichste Weg ist, zuerst zu prüfen, ob der Ordner existiert, und ihn dann zu erstellen.



<?php$folder = '/var/www/uploads/images';

if (!is_dir($folder)) { mkdir($folder, 0755, true); echo "Folder created!";} else { echo "Folder already exists.";}?>


Was ist hier wichtig:

  • is_dir() — gibt true zurück, wenn der Pfad existiert und ein Verzeichnis ist.
  • mkdir($folder, 0755, true) — der dritte Parameter true aktiviert die rekursive Erstellung. Wenn der übergeordnete Ordner nicht existiert, erstellt PHP die gesamte Kette (/var/www/uploads/images → erstellt uploads, dann images).
  • 0755 — Berechtigungen: Eigentümer kann alles, andere können lesen und ausführen.


Nachteil: Dieser Code ist nicht gegen Race Conditions geschützt. Wenn zwei Anfragen gleichzeitig is_dir() prüfen und beide versuchen, den Ordner zu erstellen, löst die zweite eine Warnung aus.



Methode 2: Produktionsansatz mit @mkdir() und Fehlerprüfung



Erfahrene Entwickler verwenden oft den Fehlerunterdrückungsoperator @ und prüfen dann explizit das Ergebnis.



<?php$folder = '/var/www/uploads/images';

if (!is_dir($folder)) { // Warnung unterdrücken, falls Ordner bereits existiert if (!@mkdir($folder, 0755, true) && !is_dir($folder)) { throw new \\RuntimeException('Failed to create folder: ' . $folder); }}?>


Warum ist das besser?

  • Wir unterdrücken die Warnung, ignorieren den Fehler aber nicht — falls die Erstellung fehlschlägt, wird eine Ausnahme ausgelöst.
  • Die doppelte Prüfung !is_dir($folder) nach mkdir() schützt vor Race Conditions: Wenn ein anderer Prozess den Ordner zwischen unserer Prüfung und dem mkdir()-Aufruf erstellt hat, stürzen wir nicht ab.


Hinweis: Der @-Operator verringert die Leistung, da PHP den Fehler trotzdem generiert, ihn aber verbirgt. In stark ausgelasteten Projekten ist es besser, Methode 3 zu verwenden.

Blogs

Buchempfehlungen