Corso su PHP: Upload

25 febbraio, 2008 1 Commento »

Come nella scorsa puntata, dedichiamo questa lezione ad esempi di uso concreto per le necessità che possono avere gli utenti alle prime armi con questo linguaggio. Oggi vedremo come è possibile creare una piccola pagina che permette l’upload di file per il proprio sito.


PHP permette l’invio di file tramite il metodo POST, ricordate quando abbiamo parlato di questo metodo per inviare informazioni? Benissimo, nello stesso modo, con una piccola variazione è possibile anche permettere l’upload di file sul vostro spazio web.(Scarica il codice)

Iniziamo col vedere come implementare il primo passo, ossia la costruzione del form per l’invio dei dati:

Corso PHP - Upload1

La prima differenza è nel parametro enctype, che non avevamo ancora incontrato, questo è fondamentale per il corretto funzionamento del meccanismo di upload, e dice all’interprete che tramite quel form vengono inviati dei file.

Il campo hidden MAX_FILE_SIZE è utile per far capire all’interprete qual è la dimensione massima dei file che deve accettare per l’upload, in questo modo si evita di effettuare il trasferimento di un file per poi scoprire che PHP lo rifiuta perché troppo grande. Il valore di questo controllo è espresso in byte e in questo caso rappresenta la dimensione massima con la configurazione di default di PHP, ossia 2 MegaByte. Affinchè funzioni è obbligatorio mettere il controllo nascosto prima dell’input col nome del file fa inviare.

E ora passiamo alla seconda parte, ovvero lo script che riceverà il file inviato:

Corso PHP - Upload2

Possiamo subito notare la presenza di un array dal nome nuovo, ossia $_FILES; questo è un array associativo che ha come chiave il nome dell’input nel form, esattamente come per $_GET e $_POST. La differenza è che ogni voce dell’array è a sua volta un altro array (per questo la definizione corretta di $_FILES è matrice) che contiene diverse informazioni sul file inviato:

  • name: esattamente quello che conteneva l’input, ossia il nome completo del file
  • type: il tipo mime del file, utile per scartare eventuali tipi di file non graditi
  • size: la dimensione in byte del file inviato
  • tmp_name: il nome temporaneo usato per salvare sul server il file inviato
  • error: l’eventuale codice di errore, per esempio se il file supera le dimensioni massime. Elenco completo qui

La funzione move_uploaded_file(), oltre a salvare permanentemente il file inviato, effettua anche un controllo, per assicurarsi che il file sia di effettiva provenienza dal metodo HTTP POST e ritorni true o false in base alla riuscita dello spostamento del file. Ovviamente sulla cartella che scegliete per salvare i file inviati, l’utente con il quale è stato eseguito il webserver deve avere permessi di scrittura. Il meccanismo di upload fornito dal linguaggio è fortemente legato alla configurazione dell’interprete; anche se la configurazione di default va bene per moltissimi casi d’uso, queste sono le opzioni da modificare in php.ini per variare il comportamento dell’interprete

file-uploads : abilita e disabilita l’upload dei file
max-filesize: specifica la dimensione massima accettata per i file in upload
upload-tmp-dir: directory temporanea in cui salvare i file
post-max-size: dimensione massima dei dati inviati viai POST
max-input-time: tempo massimo consentito per ricevere i dati via POST o GET

Nella prossima lezione analizzeremo qualche strumento per facilitarvi la scrittura del codice, continuate a seguirci!

LEZIONI PRECEDENTI:
11 Dicembre 2007: Introduzione
17 Dicembre 2007:
Installazione di una piattaforma LAMP su Ubuntu Linux
18 Dicembre 2007:
Dentro l’HTML
20 Dicembre 2007:
E tu di che tipo sei?
7 Gennaio 2008:
Operiamo?
10 Gennaio 2008:
Ed ecco gli Array
17 Gennaio 2008: Controllare l’esecuzione (1)
25 Gennaio 2008: Controllare l’esecuzione (2)
4 Febbraio 2008
: Le Funzioni (1)
6 Febbraio 2008: Le Funzioni (2)
11 Febbraio 2008: Lo scambio dei dati
14 Febbraio 2008: Le Sessioni
20 Febbraio 2008: Mail

di Rocco ZanniTuxJournal.net
Rocco Zanni Blog

Potrebbero interessarti ...

  • ^andrea^

    attenzione che il link alla lezione "Mail" è errato, rimanda ad un altro articolo…
    Per tutti gli interessati, ecco il link corretto:
    http://www.tuxjournal.net/?p=2599

    Colgo l'occasione per complimentarmi anch'io, bella guida, sintetica ed essenziale.

    Rimango in attesa delle prossime lezioni,
    grazie.