Il linguaggio
PHP permette di gestire dei file inviati grazie a un
modello HTML.
Modulo per l'invio di file
La prima cosa da fare consiste nel creare un modello HTML permettendo all'utente di aprire una finestra di dialogo per scegliere un file da inviare:
<FORM method="POST" action="[il vostro file PHP per l'upload.php]" ENCTYPE="multipart/form-data">
<INPUT type=hidden name=MAX_FILE_SIZE VALUE=2048>
<INPUT type=file name="nome_del_file">
<INPUT type=submit value="Inviare">
</FORM>
Da non dimenticare assolutamente l'attributo
ENCTYPE="multipart/form-data" ! Se non funziona il modulo non avrà alcun effetto.
Inoltre il campo MAX_FILE_SIZE è l'indicazione della dimensione massima del file da caricare per il browser, ma questo non è sufficiente per assicurarsi che i file scaricati non superino la dimensione nella misura in cui tutti i browser non prendano sistematicamente in conto questo valore. Il valore della dimensione massima del file è modificabile "hard" nel file di configurazione php.ini.
Configurazione di PHP per permettere l'upload
Il file di configurazione php.ini contiene delle direttive che permettono d'autorizzare o non l'invio dei file attraverso un modulo piuttosto che impostarli:
file_uploads= On/Off permette di autorizzare o no l'invio di file.
upload_tmp_dir = directory permette di definire la directory temporanea permettendo di accogliere il file scaricato.
upload_max_filesize = 2M permette di definire la dimensione massima autorizzata per il file. Se si oltrepassa questo limite, il server invierà un codice di errore.
post_max_size indica la dimensione massima dei dati inviati da un modulo. Questa direttiva su upload_max_filesize, bisogna dunque assicurarsi di avere post_max_size superiore a upload_max_filesize
Se non avete acceso alla configurazione (caso di un sito ospitato sul server del fornitore d'accesso o nel caso un hosting mutualizzato), potete verificare la configurazione grazie alla funzione phpinfo() :
<?
phpinfo();
?>
Recuperare un file con PHP
Il file, come le informazioni che lo riguardano, sono accessibili attraverso la variabile superglobale $_FILES[].
Per visualizzare il suo contenuto, potete utilizzare lo script seguente:
<pre><? print_r($_FILES); ?></pre>
L'uscita di questo codice sarà della forma seguente:
Array
(
[nom_du_fichier] => Array
(
[name] => Lamiabellafoto.jpg
[type] => immagine/jpg
[tmp_name] => cammino_completo_del_file_scaricato
[error] => 0
[size] => 1000
)
)
Nel caso in alto si tratta di un'immagine JPEG pesante 1 MB.
I campi $_FILES[name], $_FILES[type], $_FILES|error], $_FILES[size] permettono di effettuare dei testi sul tipo di file, la sua dimensione, il nome e verificare se ci sono stati errori.
Altresì, potete trattare gli errori nella maniera seguente:
<?
if ($_FILES['nome_del_file']['error']) {
switch ($_FILES['nome_del_file']['error']){
case 1: // UPLOAD_ERR_INI_SIZE
echo"Il file supera il limite autorizzato dal server (file php.ini) !";
break;
case 2: // UPLOAD_ERR_FORM_SIZE
echo "Il file supera il limite autorizzato nel modulo HTML !");
break;
case 3: // UPLOAD_ERR_PARTIAL
echo "L'invio del file è stato interrotto durante il transfert !";
break;
case 4: // UPLOAD_ERR_NO_FILE
echo "Il file che avete inviato ha una dimensione nulla!");
break;
}
}
else {
// $_FILES['nome_del_file']['error'] pari a 0 ossia UPLOAD_ERR_OK
// che significa che non c'è stato alcun errore
}
?>
Grazie alla funzione move_uploaded_files() è possibile trasferire l'immagine della rubrica temporanea verso una rubrica di destinazione:
<?
if ((isset($_FILES['nome_del_file']['file'])&&($_FILES['nome_del_file']['error'] == UPLOAD_ERR_OK))) {
$percorso_destinazione = '/var/www/files/';
move_uploaded_file($_FILES['nome_del_file']['tmp_name'], $percorso_destinazione.$_FILES['nome_del_file']['name']);
}
?>
_____________________
Nota: L'articolo originale è stato scritto da
jeff contribuente di
CommentCaMarche