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.
Similari
Caricare i files con jQuery
12% JQuery
jQuery File Upload è un widget di jQuery per tutti i tipi di progetti web che vogliono offrire la possibilità di caricare dei files nel proprio sito. Questo widget fornisce un interessante supporto per caricare i files in …
Interazione con i campi di un form con CSS
12% Css
Grazie al supporto da parte dei maggiori browser dei CSS Selectors versione 2.1, alcuni semplici effetti grafici possono essere proposti tramite fogli di stile in maniera leggera. In questo post vedremo come evidenziare il…
Creare URL corto utilizzando jQuery e Ajax
11% JQuery
Molti tutorial disponibili sul web per la creazione di URL brevi utilizzano lo script sul lato server, questo script funziona sul lato client. È facile e ha soli 5 righe di codice per chiamare le API di Bit.ly in modo asin…
Metodi magici e costanti predefinite in PHP
9% Php
PHP fornisce un insieme di costanti predefinite e metodi magici per i nostri programmi. A differenza delle normali costanti i quali si impostano con define(), il valore delle costanti predefinite o speciali dipendono da do…
Problemi con il BOM dell’UTF8
8% Php
Diventa un rompicapo, se si ha il BOM UTF8 all’inizio del file PHP, XML o javascript. Questi files devono inviare la loro intestazione prima di ogni altra cosa. A causa della posizione del BOM, che sono i primi bytes del f…