PHP: Upload file
Upload di file in PHP
PHP permette di gestire il caricamento di file da un form HTML. Per motivi di sicurezza e funzionamento corretto è necessario configurare e validare i file caricati.
Introduzione all’upload dei file
Per consentire il caricamento dei file è necessario un form HTML con l’attributo enctype="multipart/form-data". In PHP i file inviati vengono gestiti tramite la superglobale $_FILES, che contiene informazioni come nome, tipo, dimensione e percorso temporaneo.
Esempio: form e script di upload
Nell’esempio seguente viene creato un form e uno script PHP che sposta il file caricato in una cartella.
Codice Esempio: caricamento file

<!-- form.html -->
<form action="upload.php" method="post" enctype="multipart/form-data">
Seleziona file: <input type="file" name="fileDaCaricare">
<input type="submit" value="Carica">
</form>
<!-- upload.php -->
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileDaCaricare"]["name"]);
if (move_uploaded_file($_FILES["fileDaCaricare"]["tmp_name"], $target_file)) {
echo "Il file " . basename($_FILES["fileDaCaricare"]["name"]) . " è stato caricato con successo.";
} else {
echo "Errore durante il caricamento del file.";
}
?>
<!-- Output nel browser (se file ok):
Il file esempio.png è stato caricato con successo.
-->
⚠️ Nota Bene:
Gli esempi sono a puro scopo didattico. Si sconsiglia di utilizzarli tali e quali in ambienti di produzione.
Controlli di sicurezza
È importante applicare controlli prima di accettare un file:
- Verificare la dimensione massima
- Consentire solo alcuni tipi di file (es. immagini)
- Sanificare il nome del file
Codice Esempio: controlli aggiuntivi

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileDaCaricare"]["name"]);
$tipo_file = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// Controllo tipo file (solo immagini)
if ($tipo_file != "jpg" && $tipo_file != "png" && $tipo_file != "gif") {
die("Sono consentiti solo file JPG, PNG e GIF.");
}
// Controllo dimensione (max 2MB)
if ($_FILES["fileDaCaricare"]["size"] > 2000000) {
die("Il file è troppo grande (max 2MB).");
}
// Upload se i controlli sono passati
if (move_uploaded_file($_FILES["fileDaCaricare"]["tmp_name"], $target_file)) {
echo "Upload riuscito: " . htmlspecialchars(basename($_FILES["fileDaCaricare"]["name"]));
} else {
echo "Errore nell’upload.";
}
?>
⚠️ Nota Bene:
Gli esempi sono a puro scopo didattico. Si sconsiglia di utilizzarli tali e quali in ambienti di produzione.
Tabella riassuntiva $_FILES
Indice | Descrizione | Esempio |
---|---|---|
$_FILES['nomeCampo']['name'] | Nome originale del file | documento.pdf |
$_FILES['nomeCampo']['type'] | Tipo MIME dichiarato | image/png |
$_FILES['nomeCampo']['size'] | Dimensione in byte | 24567 |
$_FILES['nomeCampo']['tmp_name'] | Percorso temporaneo | /tmp/phpYzdqkD |
$_FILES['nomeCampo']['error'] | Codice di errore | 0 |
Considerazioni
Il caricamento di file è utile ma potenzialmente pericoloso. È fondamentale validare tipo, dimensione e nome dei file prima di salvarli sul server.