Hello,
Gleich zu Beginn. Das erste Formularfeld als Filename wird nicht reichen, da dieser nicht eindeutig ist. Am Besten machst du das in Kombination mit einem Zeitstempel
Ein Zeitstempel kann auch nicht eindeutig sein, sondern nur zufällig der einzige Request zu diesem Zeitpunkt. Der von PHP verwendete Unix-Timestamp http://www.php.net/manual/en/function.time.php ist wesentlich zu granular, der feinere http://www.php.net/manual/en/function.microtime.php könnte da schon eher zum Erfolg führen, ist aber angesichts schneller Systeme und mehrerer HTTP-Instanzen, die "gleichzeitig" laufen, immer noch zu grob.
Sowas geht also entweder mit einem übermittelten Wunschnamen, der der dann zusammen mit dem Filemode
"XB+" http://www.php.net/manual/en/function.fopen.php verwendet wird, also einen abfangbaren Fehler auslöst, wenn die datei schon vorhanden war, oder mit einem vom System ausgewürfelten Namen
http://www.php.net/manual/en/function.tmpfile.php.
Zu bedenken ist allerdings immer, dass man bei ungenügender Absicherung des Wunschnamens auf das gesamte für das Script zugängliche Filesystem zugreifen kann. Man sollte also auch Funktionen, wie basename() http://www.php.net/manual/en/function.basename.php, realpath() http://www.php.net/manual/en/function.realpath.php und pathinfo() http://www.php.net/manual/en/function.pathinfo.php auf intelligente Art mit einsetzen und die Wurzel für das Anlegen und Lesen von Dateien über das Formular auf jeden Fall statisch festlegen oder ausführlich gegenprüfen.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg