Per allegare (upload) un file ci sono delle comode funzioni PHP.
Prima di tutto, bisogna creare un form da cui caricare il file,
che deve risiedere sul nostro disco fisso.
Per poter fare ciò bisogna creare un tipo particolare di form,
che oltre alle normali proprietà ha la seguente:
enctype="multipart/form-data"
Quindi avremo, per esempio:
<form name=FORM method=POST action="pagina.php" enctype="multipart/form-data">
Il form conterrà una casella di questo tipo:
Allega un file:Questa casella è un oggetto HTML pre-costruito, e funziona automaticamente da sola,
consentendo di sfogliare le risorse del computer e scegliere il file da allegare.
Il codice HTML per ottenerla è il seguente:
<input type=file name=variabile>
Nella pagina PHP successiva, il nome del file si ottiene estraendolo dall'array
associativo $_FILES, che contiene un elemento per ciascun file allegato, chiamato
$_FILES['variabile']
Questo elemento è a sua volta un dato complesso
che contiene diverse proprietà:
Nome | Significato | Come si ottiene |
name | il nome originale del file (compresa l'estensione) | $_FILES['variabile']['name'] |
tmp_name | il nome con cui viene salvato temporaneamente | $_FILES['variabile']['tmp_name'] |
type | il tipo | $_FILES['variabile']['type'] |
size | la dimensione | $_FILES['variabile']['size'] |
error | eventuali messaggi di errore | $_FILES['variabile']['error'] |
A questo dobbiamo salvare definitivamente il file,
altrimenti sparisce non appena si cambia pagina.
L'istruzione PHP per farlo è:
move_uploaded_file($file_temporaneo, $destinazione)
dove $file_temporaneo si ottiene dalla proprietà tmp_name vista sopra:
$file_temporaneo=$_FILE['variabile']['tmp_name'];
e $destinazione deve essere il nome definitivo del file comprensivo del percorso,
quindi potremo per esempio porre:
$destinazione="allegati/".$_FILE['variabile']['name'];
in modo che il nostro file mantenga il suo nome originale
e vada a finire nella cartella "allegati".
Può sempre capitare che per qualche motivo l'operazione non vada a buon fine.
Per esempio potrebbe succedere si tenti di salvare due file con lo stesso nome,
oppure non ci sia più spazio sul disco, ecc...
Per questo l'istruzione move_uploaded_file, si può usare come una funzione
che restituisce True se l'operazione è andata a buon fine, False altrimenti:
Es:
$ok=move_uploaded_file($file_temporaneo,$destinazione);
if ($ok) { echo "operazione riuscita";}
else { echo "il file non è stato salvato"; }
Dopo che il file è stato salvato in maniera permanente, come fare a ritrovarlo
quando vorremo visualizzarlo, per esempio, in un'altra pagina?
La soluzione è quella di salvare in un archivio (o in una tabella di un Data Base)
i nomi dei file salvati ($destinazione), in modo da poterli ritrovare.
Sarebbe opportuno salvare anche il tipo di file ($_FILES['variabile']['type']),
in modo da sapere come trattarlo.
Infatti possiamo aprire qualunque tipo di file riconosciuto dal nostro browser con un link:
<a href="<? echo $destinazione; ?>"> clicca per aprire il file </a>
ma se si tratta di un'immagine possiamo anche includerla nella pagina usando il tag HTML:
<img src="<? echo $destinazione; ?>">