File Uplaod

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>';
		}
	}

?>
 
Zurück