Gumbo
Erfahrenes Mitglied
Stopfen wir noch einige Sicherheitslöcher und optimieren das Ganze … Hier mein Vorschlag:
PHP:
<?php
$destination = 'files/';
$prefix = 'copy_of_';
$errors = array();
$notices = array();
if( isset($_FILES['datei']) ) {
switch( $_FILES['datei'] ) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$errors[] = 'Die hochgeladene Datei überschreitet die erlaubte Dateigröße.';
break;
case UPLOAD_ERR_PARTIAL:
$errors[] = 'Die Datei wurde nur teilweise hochgeladen.';
break;
case UPLOAD_ERR_NO_FILE:
$errors[] = 'Es wurde keine Datei hochgeladen.';
break;
}
if( file_exists($destination.$_FILES['datei']['name']) ) {
$notices[] = 'Die Datei mit dem Dateinamen „'.$_FILES['datei']['name'].'“ existierte bereits. Die Datei wurde in „'.$prefix.$_FILES['datei']['name'].'“ umbenannt.';
$_FILES['datei']['name'] = $prefix.$_FILES['datei']['name'];
}
if( !move_uploaded_file($_FILES['datei']['tmp_name'], $destination.$_FILES['datei']['name']) ) {
$errors[] = 'Die Datei konnte nicht verschoben werden.';
}
if( count($errors) > 0 ) {
echo '<ul class="error">';
foreach( $errors as $value ) {
echo '<li>'.$value.'</li>';
}
echo '</ul>';
} else {
if( count($notices) > 0 ) {
echo '<ul class="notice">';
foreach( $errors as $value ) {
echo '<li>'.$value.'</li>';
}
echo '</ul>';
}
echo '<p>Die Datei „'.$_FILES['datei']['name'].'“ wurde mit '.$_FILES['datei']['size'].' Byte erfolgreich hochgeladen: <a href="'.$destination.$_FILES['datei']['name'].'">'.$destination.$_FILES['datei']['name'].'</a></p>';
}
}
?>