Speichern von mehreren Dateien mit gleichen Namen.

l0c4lh05t

Erfahrenes Mitglied
Hi!
Also mal angenommen ich habe mir ein Upload-Skript geschrieben, welches die hochgeladenen Dateien unter dem Namen abspeichert, mit dem sie hochgeladen wurden. Und, nur mal so angenommen, es wird eine Datei mit dem Namen "hallowelt.txt" hochgeladen. Wie prüfe ich, ob die Datei (ggf. mehrfach) vorhanden ist und wie bennene ich die Datei dann am geschicktesten in "hallowelt.1.txt" bzw. "hallowelt.2.txt" (usw.) um?
Ich komme mir, mit meiner Lösung, total dumm vor... wie würdet ihr das machen?
 
Hi,

mit file_exists kannst Du prüfen, ob es schon eine Datei unter dem Namen gibt. Wenn ja, dann durchläufst Du halt so lange eine Schleife über sagen wir mal $i, bis $name_ohne_suffix . "." . $i . $suffix nicht vorhanden ist.
Wie sah Deine Lösung denn aus?

LG
 
PHP:
<?php

function getNewFilename( $path ) {
    // Cache leeren
    clearstatcache();
    // $filepath beinhaltet den Originalen Dateinamen inklusive Pfadangabe

    if ( file_exists( "$path" ) ) {
        // Pfadinformationen abrufen
        $info      = pathinfo( $path );
        $directory = $info['dirname'];
        $extension = $info['extension'];
        $filename  = $info['filename'];
        // PHP < 5.0 Workaround: $filename  = substr( $info['basename'], 0, - strlen( $extension ) );
    
        for ( $i = 1; /* ... */ ; ++$i ) {
            if ( !file_exists( "{$directory}{$filename}({$i}){$extension}" ) ) {
                return "{$directory}{$filename}({$i}){$extension}";
            }
        }
    }

    return "$path";
}

Whoops, hab es mit Klammern statt der Punkte im Beispiel gemacht, aber sollte leicht zu ändern sein ;)
Alternativ kann man das Pattern auch vereinheitlichen mit sprintf, aber das macht für den Moment zu viel Schreibarbeit.
 
Wow, danke für die Antworten. Nichts für ungut, aber die von R00Ki3 kam meiner schon ziemlich nahe. :p
Echt sehr nett, weiter so :D
 
Zurück