Upload di file via HTTP tramite PHP
Eseguire l'upload di un file sul server via HTTP in PHP è estremamente semplice: un tipico esempio nel codice riportato di seguito, valido sia su s.o. Linux che Windows.
ATTENZIONE
- Piani Linux. Per poter funzionare correttamente, gli script di upload necessitano che i permessi della cartella di destinazione dell'upload siano impostati con chmod 777. È possibile effettuare questa configurazione tramite client FTP.
- Piani Windows. Per poter funzionare correttamente, gli script di upload necessitano che la cartella di destinazione dell'upload abbia permessi di scrittura. È possibile effettuare questa configurazione attraverso il pannello di controllo, alla voce permessi cartelle e files
upload.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <head> <title> PHP upload test page </title> </head> <body> <?php error_reporting(2047); if (isset($_POST["invio"])) { $percorso = "uploadtest/"; if (is_uploaded_file($_FILES['file1']['tmp_name'])) { if (move_uploaded_file($_FILES['file1']['tmp_name'], $percorso.$_FILES['file1']['name'])) { echo 'Nome file: <b>'.$_FILES['file1']['name'].'</b><br>'; echo 'MIME Type: <b>'.$_FILES['file1']['type'].'</b><br>'; echo 'Dimensione: <b>'.$_FILES['file1']['size'].'</b> byte<br>'; echo '======================<br>'; echo 'File caricato correttamente<br><br>'; echo '<a href="upload.php">carica un altro file</a>'; } else { echo "si è verificato un errore durante l'upload: ".$_FILES["file1"]["error"]; } } else { echo "si è verificato un errore durante l'upload: ".$_FILES["file1"]["error"]; } } else { // HTML ?> <form enctype="multipart/form-data" method="post" action="" name="uploadform"> seleziona il file da caricare sul server: <br> <input type="file" name="file1" size="50"> <br> <input type="submit" value="invia" name="invio"> </form> <?php } ?> </body> </html>
Una volta eseguito il post del form, i dati vengono caricati dall'interprete PHP in una cartella temporanea. Tramite il comando move_uploaded_file è possibile spostare il file dalla cartella temporanea ad un'altra cartella.
In questo esempio si suppone che i file vengano caricati in una cartella uploadtest posta al medesimo livello dello script. Naturalmente questa cartella deve avere i permessi corretti affinché l'upload vada a buon fine, come indicato sopra.
La variabile globale $_FILES è una matrice che contiene, per ciascun campo di tipo file di un form, le principali caratteristiche del file stesso:
- $_FILES['file1']['tmp_name']: contiene il nome assegnato dall'interprete PHP al file caricato nella cartella temporanea.
- $_FILES['file1']['name']: contiene il nome del file così com'era nel client dal quale è stato prelevato
- $_FILES['file1']['type']: contiene il tipo MIME del file
- $_FILES['file1']['size']: contiene la dimensione del file in byte
- $_FILES['file1']['error']: contiene il codice numerico di errore che si può essere verificato durante l'upload.