Bestehende Dateien nicht überschreiben

Zweite Schönheitsoperation an der Klasse

Wie schon an anderer Stelle in diesem Lernpfad erwähnt, schaut PHP nicht nach, ob schon eine Datei mit gleichem Namen im Zielverzeichnis existiert. Besteht schon eine solche Datei, wird sie mit move_uploaded_file() ohne Rück- oder Fehlermeldung einfach überschrieben und ist somit verloren.

Um dieses Problem - es braucht einzigartige Dateinamen - zu lösen, gibt es im Grunde genommen zwei Ansätze:

1. Ansatz: Dem Dateinamen einen Timestamp hinzufügen

Der erste Ansatz ist relativ einfach zu programmieren: Beim Umzug ins Zielverzeichnis wird dem bestehenden Dateinamen ein Timestamp hinzugefügt. Ist der bestehende Dateiname bereits schon lang, wird er damit noch länger. Das ist natürlich ein kleiner Nachteil.

2. Ansatz: Dateinamen nummerieren

Der zweite Ansatz ist viel aufwändiger zu programmieren. Wenn bereits eine Datei gleichen Namens im Zielverzeichnis besteht, wird der neuen Datei am Schluss des Namens (natürlich vor der Dateiendung) eine Zahl hinzugefügt.

So würde es der Mac machen (Beispiel mit Leerschlag, Klammer und Zahl): ajax (1).zip.
Der Leerschlag wäre für den Einsatz auf dem Internet wohl eher hinderlich.

Weitere Methode (private)

Ich würde dir empfehlen, für diese Task (1. oder 2. Ansatz) eine eigene, separate Methode einzusetzen, die du aus der dritten Methode aufrufst. Damit bleibt der Code der Klasse übersichtlich.

Hinweis

move_uploaded_file($from, $to): das $to beinhaltet den Pfad und den Dateinamen.