Problem mit HTML5 Upload Multiple Files

  • Hallo! Ich brauche dringend einen Tipp! Ich habe alles versucht, kriege es aber nicht hin.

    Ich habe hier ein Upload PHP-Script gefunden, wo man mehrere Bilder gleichzeitig hochladen kann. Dies geht ja jetzt auch schon mit HTML5. Soweit funktioniert dieses Script auch und lädt alle Dateien in den richtigen Ordner.

    Ich möchte es nun allerdings so haben, dass er Dateien beim Upload in so ein Format umändert: "bild_(Timestamp).jpg", sodass Dateien nicht überschrieben werden können. Wenn ich es hinten bei $name so reinschreiben würde,

    Also:

    PHP
    rename($_FILES['file']['tmp_name'][$id], './bilder/' . 'bild_.'time().'.jpg');

    lädt er immer nur eine Datei mit diesem richtigen Format hoch, auch wenn ich eigentlich mehrere Dateien gleichzeitig hochladen wollte. Wenn ich es mit #name so lasse (also dass er den Orginal-Namen vom Bild übernimmt) dann klappt es wunderbar und lädt alle Bilder hoch.

    Ich bin noch nicht dahinter gekommen warum es nicht funktioniert. Könnt ihr mir helfen?


    PHP
    if($_SERVER['REQUEST_METHOD'] == 'POST') {    foreach($_FILES['file']['name'] as $id => $name) {
    rename($_FILES['file']['tmp_name'][$id], './bilder/' . $name);        
    echo "<p>$name uploaded successfully!</p>";    }}

    4 Mal editiert, zuletzt von mwde85 (20. August 2013 um 13:04)

  • 3 Punkte:

    • Nicht rename, sondern move_uploaded_file benutzen
    • Dein Timestamp geht in die Hose, da mehr als eine Datei pro Sekunde (bei dir) renamed wird.
    • Um einen eindeutigen Namen zu erhalten, nutze uniquid()
  • Dein Problem ist, dass Timestamp als kleinste Einheit die Sekunde hat, die Dateien aber schneller abgelegt werden, daher überschreibt Datei 2 mit gleichen Namen Datei 1 und Datei 3 hat auch den gleichen Timestamp also gleichen Namen und überschreibt damit die Datei 2. Es bleibt also am Schluss nur die letzte Datei gespeichert.
    Füge der Datei als Suffix noch die Id hinzu, dann passt es.

  • Ja super! Genau daran hats tatsächlich gelegen!

    Vielen vielen vielen Dank! Darauf wäre ich jetzt nicht gekommen. Die ganze Nacht habe ich mich damit rumgeschlagen :-).