Obsługa upload plików

Oto kawałek kodu który obsługuje upload plików.

Kod html formularza jest bardzo prosty:

<form action="upload.php" enctype="multipart/form-data" method="post"> 
   <input name="plik_upload" type="file" />
   <input type="submit" value="Upload" />
</form>

a tak może wyglądać plik upload.php

Jest tu użyta funkcja polskawe opisana we wcześniejszym poście Jak zmienić polskie znaki na polskawe?. Linijka w której jest przypisywana wartość do zmiennej $uploadfile ustala nazwę pliku po wgraniu na serwer oraz dodaje ścieżkę bezwzględną do niego. Stała APPLICATION_PATH musi byś wcześniej zdefiniowana. Przykład ten dopuszcza tylko upload plików zawierających grafikę ale można to zmodyfikować w linii if(!ereg…
Na końcu tego fragmentu kodu zmienna $komunikat będzie pusta jeśli nie było żadnego uploadu lub będzie zawierała komunikat o efekcie operacji.

$komunikat = '';
if(isset ($_FILES['plik_upload'])) {
   $file = $_FILES['plik_upload'];
   $uploadfile = APPLICATION_PATH.'/upload/'.date('U').'_'.str_replace(array('!','@','#','$','%','^','&','*','(',')','+','~','`',',','"',"'",'< ','>','?','=',';'.':','[',']','{','}','|'), '', str_replace(array(' ','-'), '_', strtolower(polskawe($file['name']))));

   if(!ereg('image', $file['type'])) {
      $komunikat = 'Przesyłany plik nie jest grafiką.';
   } elseif($file['error'] != UPLOAD_ERR_OK) {
      switch ($file['error']) {
         case UPLOAD_ERR_INI_SIZE:
         $komunikat = 'Za duży plik.';
      case UPLOAD_ERR_FORM_SIZE:
         $komunikat = 'Za duży plik.';
      case UPLOAD_ERR_PARTIAL:
         $komunikat = 'Przesłany plik był tylko częściowo przesłane.';
      case UPLOAD_ERR_NO_FILE:
         $komunikat = 'Żaden plik nie został przesłany.';
      case UPLOAD_ERR_NO_TMP_DIR:
         $komunikat = 'Nie może utworzyć tymczasowego katalogu dla pliku.';
      case UPLOAD_ERR_CANT_WRITE:
         $komunikat = 'Nie można zapisać pliku na dysku serwera.';
      case UPLOAD_ERR_EXTENSION:
         $komunikat = 'Przesyłanie pliku przerwane.';
      default:
         $komunikat = 'Nieznany błąd';
   }
   }elseif (move_uploaded_file($file['tmp_name'], $uploadfile)) {
      chmod($uploadfile, 0666);
      $komunikat = 'Plik został załadowany';
   } else {
      $komunikat = 'Błąd ładowania pliku';
   }
}