• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datei-Upload: if_exists(Dateiname[auto_increment])

aJunkie

Mitglied
Hallo,

ich hoffe, die Überschrift macht deutlich, was ich vorhabe.

Meine bisherigen Zeilen:
PHP:
  if(isset($_FILES['foto']) && ($_POST['fehler'] == '') && $_POST['vorname'] != '') {                // wenn Datei ($foto) vorhanden
    if(!file_exists("img/".$_FILES['foto']['name'])) {
        move_uploaded_file($_FILES['foto']['tmp_name'],                                                // vom Temp Ordner in angegebenes Verzeichnis verschieben.
        'img/' . basename($_FILES['foto']['name']));
        $foto = $_FILES['foto']['name'];
        } else die("Datei schon vorhanden"); // Hier dann Dateinamen ändern.
    }
$foto wird dann in die Datenbank geschrieben.
Allerdings, wenn "foto.jpg" schon vorhanden ist, wird diese überschrieben.
Das möchte ich unterbinden.
Soll aber so sein:
if_exists("foto.jpg") > "foto(1).jpg"

Im Prinzip wie bei Windows, der hinter dem eigentlichen Dateinamen noch eine Zahl in Klammern setzt.

Also auch wenn "foto(1).jpg" existiert, soll es "foto(2).jpg" benannt werden.

Ich habe zwar Ideen mit if file_exists, rename, etc.
Aber wie genau müsste die Syntax aussehen?

Danke.
 
Zuletzt bearbeitet:
PHP:
$filename = $_FILES['foto']['name'];
$extension = end(explode(".", $filename));
$filename = substr($filename, (strlen($extension) + 1) * -1);
$fielname_new = $filename;

$temp = $_FILES['foto']['tmp_name'];
$destination = 'img';

for ($i = 1; file_exists("$destination/$filename_new.$extension'"); $i++) {
    $filename_new = $filename . '(' . $i . ')';
}

move_uploaded_file($temp, "$destination/$filename_new.$extension");
nicht getestet
 
Danke für den Versuch.
Das Uploaden funktioniert, aber der Dateiname ist dann immer einfach leer.
Und wenn ich das selbe Foto nochmal hochlade, wird das "alte - selbe" einfach ersetzt. Wieder mit einem leeren Dateinamen.
 
PHP:
$filename = $_FILES['foto']['name'];
$extension = end(explode(".", $filename));
$filename = substr($filename, 0, strlen($filename) - strlen($extension) - 1);

$filename_new = $filename;

$temp = $_FILES['foto']['tmp_name'];
$destination = '/foo/bar/tmp';

for ($i = 1; file_exists("$destination/$filename_new.$extension"); $i++) {
    $filename_new = $filename . '(' . $i . ')';
}

move_uploaded_file($temp, "$destination/$filename_new.$extension");
 
Du musst das Zielverzeichnis hier

Code:
$destination = '/foo/bar/tmp';

natürlich an deine Umgebung anpassen.
 
Achso, natürlich. =) Sorry.

Edit: Obwohl ich da noch was anpassen musste. =)
 
Zuletzt bearbeitet:
Zurück
Oben