PROGRAMMIAMO
PHP - File: Upload

Caricamento file da computer utente a server remoto: form lato client

Ci sono molti casi in cui si vuole permettere all'utente di caricare un proprio file sul server remoto. Per esempio ciò accade quando un visitatore può caricare una propria fotografia (immagine) sul server.

Il caricamento lato client avviene semplicemente con un form che contiene una casella di input di tipo "file". Per esempio il form potrebbe essere il seguente:


Il codice HTML associato al form è il seguente

<form method="post" action="paginaupload.php">
<input type="file" name="foto" />
<br />
<input type="submit" value="Invia" />
</form>

Si noti il tag

<input type="file" name="foto" />

che produce sul form la visualizzazione del controllo

Premendo sul bottone Sfoglia... l'utente può scegliere il file navigando fra le proprie cartelle:

Premendo il bottone INVIA, le informazioni sul file selezionato vengono inviate alla pagina indicata nell'action del form (nel nostro caso "paginaupload.php").

 

Script lato server

La pagina PHP che riceve il file dal form, può accedere a molte informazioni sul file stesso. Tali informazioni sono contenute in un vettore predefinito di nome $_FILES. Si tratta di un vettore bidimensionale: il primo indice del vettore specifica il nome del file (e deve coincidere col nome usato nella input text nel form; nel nostro caso il nome è "foto"); il secondo indice del vettore specifica quale informazione sul file si vuole ottenere:

$_FILES['foto']['name'] // nome originale del file sulla macchina dell'utente
$_FILES['foto']['type'] // tipo del file  (ad esempio "image/gif") 
$_FILES['foto']['size'] // dimensione del file in bytes
$_FILES['foto']['tmp_name'] // nome del file temporaneo assegnato al file caricato sul server

Si consideri il seguente esempio di script per caricare un'immagine selezionata dall'utente:

<?php

$nomefile = $_FILES['foto']['name'];
$destinazione = "./immagini/";

if (file_exists($destinazione.$nomefile))
die("Errore: file già presente sul server!");

if ($_FILES['foto']['size']>250000)
die("Errore: dimensioni del file troppo grandi!");

$type = $_FILES['foto']['type'];

if ($type != "image/gif" && $type != "image/jpeg")
die("Errore: tipo di file non corretto!");

$temp = $_FILES['foto']['tmp_name'];

move_uploaded_file($temp, $destinazione.$nomefile);

?>

Si osservi anzitutto l'istruzione die che ha lo stesso funzionamento di una echo (cioè visualizza la stringa), ma in più termina l'esecuzione dello script (è utile per visualizzare un messaggio e terminare l'esecuzione in caso di errore).

Il PHP crea automaticamente una copia temporanea del file caricato. Tale copia si trova in $_FILES['foto']['temp_name'] e viene cancellata automaticamente al termine dello script. Pertanto è necessario salvarla in un'altra posizione mediante la funzione move_uploaded_file.

 

precedente - successiva

Sito realizzato in base al template offerto da
Graphixmania.it - Grafica e non solo
http://www.graphixmania.it