PHP

$_FILES

Spiegazione dettagliata della variabile superglobale $_FILES in PHP con esempi pratici e laboratorio guidato.

In PHP, la variabile superglobale $_FILES è un array associativo che contiene tutte le informazioni sui file caricati tramite un form HTML che utilizza enctype="multipart/form-data".

Ogni file caricato viene rappresentato in $_FILES come un sotto-array che contiene dati come il nome del file, il tipo MIME, la dimensione, il nome temporaneo e gli eventuali errori.

🔹 Struttura base di $_FILES

La struttura di $_FILES per un singolo input file è la seguente:


$_FILES["nome_input"] = array(
    "name" => "nomefile.jpg",
    "type" => "image/jpeg",
    "tmp_name" => "/tmp/php1234.tmp",
    "error" => 0,
    "size" => 204800
);

🔹 Chiavi principali di $_FILES

Chiave Descrizione Esempio
$_FILES["file"]["name"]Nome originale del file caricato.foto.jpg
$_FILES["file"]["type"]Tipo MIME del file.image/jpeg
$_FILES["file"]["tmp_name"]Percorso temporaneo del file sul server./tmp/phpXYZ.tmp
$_FILES["file"]["error"]Codice di errore associato al caricamento.0 (nessun errore)
$_FILES["file"]["size"]Dimensione del file in byte.24567

🔹 Codici di errore comuni

CodiceSignificato
0Nessun errore, upload riuscito.
1Il file supera la dimensione massima impostata in php.ini (upload_max_filesize).
2Il file supera il limite specificato nel form HTML (MAX_FILE_SIZE).
3Il file è stato caricato solo parzialmente.
4Nessun file è stato caricato.
6Cartella temporanea mancante.
7Errore nel salvataggio del file su disco.

🔹 Esempio base di upload


<form method="post" enctype="multipart/form-data">
    Scegli un file: <input type="file" name="file"><br><br>
    <input type="submit" value="Carica">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if ($_FILES["file"]["error"] == 0) {
        move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]);
        echo "File caricato con successo!";
    } else {
        echo "Errore nel caricamento del file.";
    }
}
?>

🔹 Nota di sicurezza

È importante verificare sempre il tipo e la dimensione del file prima di salvarlo sul server. Evita di fidarti del nome del file originale e usa pathinfo() o mime_content_type() per controllare il formato effettivo.


<?php
$estensione = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);
if ($estensione != "jpg" && $estensione != "png") {
    echo "Formato non consentito!";
    exit;
}
?>


LABORATORIO

Caricare un file con $_FILES

In questo laboratorio imparerai a creare un modulo HTML per caricare file su un server PHP utilizzando la variabile $_FILES. Scoprirai come accedere alle informazioni del file e come gestire in modo sicuro il salvataggio sul server.


1 Creare il modulo HTML

Crea un file chiamato upload-file.php e inserisci il seguente modulo HTML che consente di selezionare un file da caricare:


<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <title>Laboratorio $_FILES</title>
</head>
<body>

<h2>Carica un file</h2>
<form method="post" enctype="multipart/form-data">
    Scegli un file: <input type="file" name="file"><br><br>
    <input type="submit" value="Carica file">
</form>

</body>
</html>
    

2 Gestire il caricamento con PHP

Aggiungi sotto al form il seguente script PHP per gestire il caricamento e spostare il file nella cartella uploads/.


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_FILES["file"]) && $_FILES["file"]["error"] == 0) {

        $nome = $_FILES["file"]["name"];
        $tmp = $_FILES["file"]["tmp_name"];
        $destinazione = "uploads/" . basename($nome);

        if (move_uploaded_file($tmp, $destinazione)) {
            echo "<p style='color:green'>File caricato con successo: $nome</p>";
        } else {
            echo "<p style='color:red'>Errore nel salvataggio del file.</p>";
        }

    } else {
        echo "<p style='color:red'>Errore durante l'upload. Codice: " . $_FILES["file"]["error"] . "</p>";
    }
}
?>
    

3 Mostrare informazioni sul file caricato

Dopo aver caricato un file, puoi mostrare tutte le informazioni ottenute da $_FILES:


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST" && $_FILES["file"]["error"] == 0) {
    echo "<h4>Dettagli del file:</h4>";
    echo "<ul>";
    foreach ($_FILES["file"] as $chiave => $valore) {
        echo "<li><b>" . htmlspecialchars($chiave) . ":</b> " . htmlspecialchars($valore) . "</li>";
    }
    echo "</ul>";
}
?>
    

4 Limitare il tipo e la dimensione dei file

È buona pratica accettare solo alcuni tipi di file (es. immagini) e limitare la dimensione massima:


<?php
$tipo = mime_content_type($_FILES["file"]["tmp_name"]);
$dimensione = $_FILES["file"]["size"];

if ($dimensione > 2 * 1024 * 1024) { // 2 MB
    echo "<p style='color:red'>Il file è troppo grande.</p>";
    exit;
}

if (!in_array($tipo, ["image/jpeg", "image/png", "image/gif"])) {
    echo "<p style='color:red'>Solo file immagine consentiti (JPG, PNG, GIF).</p>";
    exit;
}
?>
    

5 Test e analisi

  • Apri upload-file.php nel browser.
  • Seleziona un file dal tuo computer e clicca su Carica file.
  • Controlla la cartella uploads/ per verificare che il file sia stato salvato.
  • Prova a caricare file di tipo o dimensione non consentita per verificare la validazione.