L'esempio illustrato in questa pagina mostra come effettuare l'upload di immagini da una pagina web. A fondo pagina viene spiegato come modificare il codice per effettuare l'upload di file generici.
Su una pagina web inseriamo un form con un controllo input file e un pulsante. All'input file diamo il nome "image". Il form invia i dati ad una pagina di nome "upload.php". Ecco un esempio:
<form action="upload.php" method="post" enctype="multipart/form-data">
<!-- Campo file di nome "image" -->
<input name="image" type="file" size="40" />
<br /><br />
<!-- Pulsante -->
<input name="upload" type="submit" value="Carica
immagine" />
</form>
Nella pagina upload.php inseriamo ora il seguente codice:
do {
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
// Controllo che il file non superi i 18 KB
if ($_FILES['image']['size'] > 18432) {
$msg = "<p>Il file non deve superare i 18 KB!!</p>";
break;
}
// Ottengo le informazioni sull'immagine
list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);
// Controllo che le dimensioni (in pixel) non superino 160x180
if (($width > 160) || ($height > 180)) {
$msg = "<p>Dimensioni non corrette!!</p>";
break;
}
// Controllo che il file sia in uno dei formati GIF, JPG o PNG
if (($type!=1) && ($type!=2) && ($type!=3)) {
$msg = "<p>Formato non corretto!!</p>";
break;
}
// Verifico che sul sul server non esista già un file con lo stesso nome
// In alternativa potrei dare io un nome che sia funzione della data e dell'ora
if (file_exists('upload_img/'.$_FILES['image']['name'])) {
$msg = "<p>File già esistente sul server. Rinominarlo e riprovare.</p>";
break;
}
// Sposto il file nella cartella da me desiderata
if (!move_uploaded_file($_FILES['image']['tmp_name'], 'upload_img/'.$_FILES['image']['name'])) {
$msg = "<p>Errore nel caricamento dell'immagine!!</p>";
break;
}
}
} while (false);
echo $msg;
Quando un file viene caricato sul server questo viene posto dal PHP in una directory temporanea del server. Sta al programmatore effettuare i dovuti controlli sul file e, una volta superati, spostare il file nella cartella desiderata (nel nostro esmpio "upload_img/"). La variabile $_FILES['image'] è un array che contiene alcune informazioni sul file caricato. Vediamo alcune di queste informazioni:
$_FILES['image']['tmp_name'] contiene il percorso e il nome del file caricato nella cartella temporanea;
$_FILES['image']['name'] contiene solo il nome del file, senza il percorso in cui si trova;
$_FILES['image']['size'] ci dice la dimensione (in byte) del file caricato; lo utilizziamo per controllare che il file non superi i 18 KB;
Vediamo ora alcune delle funzioni del PHP utilizzate nel codice.
La funzione is_uploaded_file() verifica che il file in questione sia stato effettivamente caricato attraverso il PHP. Questo controllo non è indispensabile ma... la sicurezza non è mai troppa.
La funzione getimagesize() ottiene informazioni su un file di tipo immagine. Nel nostro esempio ci serve per controllare il tipo di immagine accettata (GIF, JPG o PNG) e che l'immagine non sia più grande di 160x180 pixel.
La file_exists() controlla se un file esiste oppure no. Nell'esempio è stata utilizzata per impedire di caricare sul server un file con un nome che sia già presente sul server. Volendo potremmo evitare questo controllo avendo però cura di dare ad ogni file caricato un nome univoco, ad esempio una combinazione della data e dell'ora e altri caratteri.
Finalmente la move_uploaded_file sposta un file caricato tramite PHP nella cartella da noi desiderata.
Questo codice può essere facilemente adattato per fare l'upload di file in generale e non esclusivamente di immagini. E' sufficiente rimuovere i controlli sulle dimensioni in pixel e sul tipo di immagine. Spero di essere stato chiaro nella spiegazione e di esservi stato utile.
Argomenti correlati: