Uploadscript erweitern damit Bilder nicht berschrieben werden

aargau

Erfahrenes Mitglied
Hallo Zusammen,

Ich möchte mein Upload Script so erweitern das kein Bild überschriben werden kann. Momentan ist es noch möglich ein Bild zu überschreiben. Was würdet ihr da machen? Eine überprüfung ob das File schon auf dem Server ist und allenfals ein Fehler ausgeben oder einfach das File umbenennen das es keine Doppelte geben kann?

Bei beiden weis ich nicht wirklich wie ich es anstellen soll...
 
Prüf doch einfach ob der Name vorhanden ist, falls ja hängst du vorne oder hinten ein paar Buchstaben/Zahlen ran.
Oder benenn sie nach dem aktuellen Timestamp.

PHP:
do { 
  $file_name = $_FILES['dein_input']['tmp_name'].time();
} while( file_exists("./upload_dir/".$file_name) == true );
Ungetestet, aber müsste funktionieren.
 
Zuletzt bearbeitet:
Wenn bereits eine Datei mit entsprechenden Namen existiert, gerät das Skript in eine Endlosschleife.
 
Ja, ich habs heute irgendwie...

Jetzt ist es wirklich richtig ;)
 
Zuletzt bearbeitet:
Ich denke er meint das hier:

PHP:
do { 
  $file_name = $_FILES['dein_input']['tmp_name'].time();
} while( file_exists("./upload_dir/".$file_name) == true );
 
Momentan seht das Script so aus: (habe auch schon einiges Geändert)
PHP:
><?php if(isset($_POST['send']) && $_POST['send'] == "ja")  
{ $uploaddir = 'img/upload/';  
if (move_uploaded_file($_FILES['picture1']['tmp_name'], $uploaddir . $_FILES['picture1']['name']))  
{  

print "  

\n"; }  
else  
{  
print "Kein Bild hochgeladen";  
}  
}  
?>
<?  
// Datei auf Grösse kontrollieren  

$maxsize = 104; // KB  
$maxsize = $maxsize * 1024; // Umwandlung in Byte  

if ($_FILES['picture1']['size'] > $maxsize)  
{  
 
}  

// Datei verschieben  



$dir = "img/userpic/";  

if ($_FILES['picture1']['size'] > "0")  
{  

$filename = $_FILES['picture1']['name'];  

move_uploaded_file ($picture, "$dir$filename");  
chmod ("$uploaddir$filename", 0777);  
}  

// Datei auf Typ kontrollieren und wenn nötig wieder löschen  
$fileinfos = getimagesize("$uploaddir$filename");  
$type = $fileinfos[2]; // 2 = JPG  

if ($type != 2)  
{  
unlink("$uploaddir$filename"); // Löschen  
echo "Fehler! Das Bild ist kein Bild des Types JPG! " ; exit ;
}  

// Thumbnail erstellen  
//////////////////////  

// Anmerkungen:  
//  
// $dir = Pfad für das Verzeichnis, in dem sich das upgeloadete Bild befindet  
// $filename = dateiname.jpg  

// Größe des Bildes auslesen  

$size = getimagesize("$uploaddir$filename");  
$width = $size[0];  
$height = $size[1];  

// Breite des Thumbnails festlegen (Höhe wird automatisch angepasst)  

$width_tn = 500;  
$height_tn = intval($height * $width_tn / $width);  

// Bei GD < 2.0.1: ImageCreateTrueColor -> ImageCreate, ImageCopyResampled -> ImageCopyResized  

$picture = ImageCreateFromJPEG("$uploaddir$filename");  
$picture_tn = ImageCreateTrueColor($width_tn,$height_tn);  
ImageCopyResampled($picture_tn,$picture,0,0,0,0,$width_tn,$height_tn,$width,$height);  

// Endung "_tn" bei Dateiname hinzufügen, vor ".jgp"  

$filename = explode (".", $filename);  
$tn = ".";  

// Thumbnail in $dir mit angepasstem $filename speichern, JPG Qualität: 95  

ImageJPEG($picture_tn, $dir.$filename[0].$tn.$filename[1],95);
?>

Wie muss ich das nun umschreiben damit das File mit z.B. aktuellem Datum und Zeit gespeichert wird?
 
Ersetze:
PHP:
$filename = $_FILES['picture1']['name'];
Durch:
PHP:
$filename = $_FILES['picture1']['name'].time();

Dann wird ein Timestamp an den Dateinamen gehängt. Alternative wäre, dass du mit [phpf]date[/phpf] arbeitest und etwas anderes dranhängst.
 
Hallo!

Die Kombination aus dem Original Dateinamen und einem Timestamp halte ich für am sichersten.
Denn die Wahrscheinlichkeit dass jemand eine Datei mit dem selben Dateinamen wie jemand anderes ausgerechnet zum exakt selben Zeitpunkt hochläd, ist doch sehr sehr unwahrscheinlich.
Wenn es doch date() sein soll, dann aber mit kompletten Datum und Uhrzeit (inkl. der Sekunden).

Gruss Dr Dau
 
Zurück