Dalle foto di famiglia ai documenti aziendali, file uploads potenzia molte delle applicazioni web più importanti.
L'oggetto $_FILES

Un tipico form in HTML che consente all’utente di caricare un file potrebbe assomigliare a questo:
<html>
  <body>

    <form action="upload_file.php" method="post" enctype="multipart/form-data">
      Nome File:
      <input type="file" name="file" id="file" /> 
      <br />
      <input type="submit" name="submit" value="Invia" />
    </form>

  </body>
</html>        
In questo caso, l’unico campo visualizzato dal form sarà il campo “file”. Questo campo permette all’utente di navigare sul proprio disco rigido per cercare il file che si desidera caricare. La specifica enctype “multipart/form-data” indica che il campo deve essere compilato con dati binari, come un file, piuttosto che da un input digitato dall’utente.
Le applicazioni PHP consentono agli utenti di caricare i file attraverso il suo oggetto $_FILES. Gli sviluppatori possono utilizzare l’oggetto $_FILES per controllare le proprietà di un file caricato:

  • $_FILES["file"]["name"] – il nome del file caricato
  • $_FILES["file"]["type"] – il tipo del file caricato
  • $_FILES["file"]["size"] – la dimensione in byte del file caricato
  • $_FILES["file"]["tmp_name"] – il nome della copia temporanea del file memorizzato sul server
  • $_FILES["file"]["error"] – il codice di errore risultante dal caricamento di file

Per i file che si caricano con successo, il valore di $_FILES[“file”][“error”] è pari a 0. Tuttavia, alcuni sviluppatori potrebbero voler porre delle restrizioni sui files che gli utenti possono caricare.

Tipo di File
Gli sviluppatori possono utilizzare la proprietà $_FILES["file"]["type"] per limitare i tipi di file da caricare da quelli in uso per l’applicazioni specifica. Ad esempio, le imprese possono voler limitare i tipi di file per documenti, fogli di calcolo e presentazioni, ma non permetterà agli utenti di pubblicare foto, video o programmi eseguibili.
<?php        
if (($_FILES["file"]["type"] != "application/msword")
|| ($_FILES["file"]["type"] != "application/vnd.ms-excel ")
|| ($_FILES["file"]["type"] != "application/vnd.ms-powerpoint"))

  {
  echo "Tipo invalido di file";
  }
?>        
Dimensione del file
Gli amministratori di rete possono inoltre scegliere di limitare le dimensioni dei file che gli utenti possono caricare sul server al fine di ridurre l’utilizzo della larghezza di banda. Gli sviluppatori possono impostare dei limiti sulle dimensioni di un file che un utente può caricare.
<?php        
if ($_FILES["file"]["size"] < 25000)) // Dimensione massima: 25KB
  {
  echo "La dimensione del file supera il massimo consentito.";
  }
?>        
Tempo di scadenza
Un altro metodo che gli amministratori utilizzano per risparmiare larghezza di banda è di limitare il tempo che una pagina può impiegare per caricare un file. La maggior parte delle applicazioni PHP ha il time out dopo 30 secondi, ma lo sviluppatore può impostare il tempo come poco o tanto, se necessario modificando il file php.ini sul server o impostare il tempo nell’applicazione stessa.
Nel caso del file PHP.INI modificare la voce max_input_time a 300
Come script PHP
<?php        
// codice che carica il file in una directory temporanea
ini_set('max_input_time', 300);
// codice che sposta il file in nuova directory
?>     
Assegnazione della Directory
I files caricati quindi hanno bisogno di essere memorizzati in una directory sul server. Il metodo move_uploaded_file() sposta il file caricato dalla directory temporanea alla directory assegnata.
<?php        
//assegnazione della Directory
$uploaddir = '/user/www/uploads/'; 
//assegnazione della Directory e il nome del file
$uploadfile = $uploaddir . basename($_FILES['file']['name']); 
// controlla se il file tmp_name è stato caricato con successo
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { 
    echo "File caricato con successo.\n";
} else {
    echo "Carica del file non riuscita\n";
}
?>        
 
Tali restrizioni possono consentire all’utente la libertà di caricare i file di cui ha bisogno, evitando in gran parte del danno volontario o accidentale che può verificarsi quando i file vengono trasmessi sulla rete.