English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questa guida, imparerai come utilizzare PHP per caricare file su un server web remoto.
In questo tutorial, impareremo come utilizzare un modulo HTML semplice e PHP per caricare file su un server remoto. Puoi caricare qualsiasi tipo di file, come immagini, video, file ZIP, documenti Microsoft Office, PDF, file eseguibili e altri vari tipi di file.
Esempio seguente creerà un modulo HTML semplice per caricare file.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Modulo di Caricamento File</title> </head> <form action="upload-manager.html" method="post" enctype="multipart/form-data"> <h2>Carica File</h2> <label for="fileSelect">Nome del file:</label> <input type="file" name="photo" id="fileSelect"> <input type="submit" name="submit" value="Carica"> <p><strongNota:</strong> È consentito solo il formato.jpg, .jpeg, .gif, .png, con una dimensione massima di 5 MB.</p> </form> </html>
Attenzione:Oltre aSelezione del fileOltre ai campi, il modulo di caricamento deve utilizzareHTTP postIl metodo deve includere un attributo enctype="multipart/form-data". Questo attributo garantisce che i dati del modulo siano codificati come MIME dati multi-segmentati, che è necessario per caricare grandi quantità di dati binari (ad esempio immagini, audio, video, ecc.).
Di seguito è riportato il codice completo del file "Upload-manager.php". Questo file memorizzerà permanentemente i file caricati nella cartella "upload" e eseguirà alcune verifiche di sicurezza di base, come il tipo di file e la dimensione del file, per assicurarsi che l'utente carichi il tipo di file corretto e all'interno dei limiti consentiti.
<?php // Verifica se il modulo è stato inviato if ($_SERVER["REQUEST_METHOD"] == "POST") { // Verifica se il file è stato caricato con successo se (isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0) { $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png"); $filename = $_FILES["photo"]["name"]; $filetype = $_FILES["photo"]["type"]; $filesize = $_FILES["photo"]["size"]; // Verifica l'estensione del file $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!array_key_exists($ext, $allowed)) die("Errore: Seleziona un formato di file valido."); // Verifica la dimensione del file - massimo 5MB $maxsize = 5 * 1024 * 1024; if($filesize > $maxsize) die("Errore: La dimensione del file è superiore al limite consentito."); // Verifica il tipo MIME del file if(in_array($filetype, $allowed)){ // Verifica se il file esiste prima di caricarlo if(file_exists("upload/" . $filename)){ echo $filename . " è già esistente."; } else { move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename); echo "Il tuo file è stato caricato con successo."; } } else { echo "C'è stato un problema durante l'upload del tuo file. Prova di nuovo."; } } else { echo "Errore: " . $_FILES["photo"]["error"]; } } ?>
Attenzione:Questo script impedisce l'upload di file con lo stesso nome di quelli già presenti nella stessa cartella. Tuttavia, se desideri permetterlo, aggiungi una stringa casuale o un timestamp all'inizio del nome del file, ad esempio $filename = time() . '_' . $_FILES["photo"]["name"];
Potrebbe interessarti sapere di cosa si tratta questo codice. Bene, esaminiamo passo dopo passo ogni parte di questo esempio di codice per comprendere meglio il processo.
Una volta inviato il modulo, le informazioni sul file caricato possono essere accedute tramite l'array superglobale PHP $_FILES. Ad esempio, il nostro modulo di upload contiene un campo di selezione di file chiamato photo (cioè name = "photo"), se qualsiasi utente utilizza questo campo per caricare un file, possiamo ottenere i suoi dettagli, come nome, tipo, dimensione, nome temporaneo, o qualsiasi errore che si è verificato durante il tentativo di upload tramite l'array associativo $FILES["photo"], come indicato di seguito:
$_FILES["photo"]["name"] — Questo valore dell'array specifica il nome originale del file, inclusa l'estensione del file. Non include il percorso del file.
$_FILES["photo"]["type"] — Questo valore dell'array specifica il tipo MIME del file.
$_FILES["photo"]["size"] — Questo valore dell'array specifica la dimensione del file in byte.
$_FILES["photo"]["tmp_name"] — Questo valore dell'array specifica il nome temporaneo, inclusa la completa percorso assegnato al file dopo che è stato caricato sul server.
$_FILES["photo"]["error"] — Questo valore dell'array specifica gli errori o i codici di stato relativi al caricamento del file, ad esempio, se non ci sono errori, è 0.
Il codice PHP nell'esempio seguente mostrerà solo i dettagli del file caricato e lo memorizzerà nella directory temporanea del server web.
<?php if($_FILES["photo"]["error"] > 0) { echo "Errore: " . $_FILES["photo"]["error"] . "<br>"; } else { echo "Nome del file: " . $_FILES["photo"]["name"] . "<br>"; echo "Tipo del file: " . $_FILES["photo"]["type"] . "<br>"; echo "Dimensione del file: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>"; echo "Memorizzato in: " . $_FILES["photo"]["tmp_name"]; } ?>
Suggerimento:Dopo aver caricato con successo il file, questo verrà automaticamente memorizzato nella directory temporanea del server. Per memorizzare permanentemente questo file, è necessario utilizzare la funzione move_uploaded_file() di PHP per spostarlo dalla directory temporanea alla posizione permanente.