Come caricare un file in PHP (con esempio)

In questo articolo, spiegherò le basi del caricamento di file in PHP. In primo luogo, esamineremo le opzioni di configurazione di PHP che devono essere implementate per il caricamento di file di successo. In seguito, svilupperemo un esempio reale di come caricare un file. 

Configura le impostazioni PHP

Ci sono un paio di impostazioni di configurazione PHP che vorrete verificare in anticipo per il caricamento di file di successo. In questa sezione, esamineremo ogni singola opzione che è importante per il caricamento del file PHP. Queste opzioni possono essere configurate nel php.ini file.

Se non sei sicuro di dove trovare il tuo php.ini file, puoi usare il php_ini_loaded_file () per individuarlo. Basta creare un file PHP sul tuo server con la seguente riga e aprirlo dal browser.  

Ecco un estratto da un file di installazione con alcune impostazioni predefinite utili.

; Se consentire il caricamento di file HTTP. file_uploads = attivo; Directory temporanea per file caricati HTTP. ; Userà il sistema predefinito se non impostato. ; upload_tmp_dir =; La dimensione massima consentita per i file caricati. upload_max_filesize = 16M; Numero massimo di file che possono essere caricati tramite una singola richiesta max_file_uploads = 20; Dimensione massima dei dati POST accettati da PHP. post_max_size = 20M max_input_time = 60 memory_limit = 128M max_execution_time = 30

Le impostazioni chiave

file_uploads

Il valore del file_uploads direttiva dovrebbe essere impostata su Sopra per consentire il caricamento di file. Il valore predefinito di questa direttiva è Sopra.

upload_max_filesize

Il upload_max_filesize direttiva consente di configurare la dimensione massima del file caricato. Per impostazione predefinita, è impostato su 2M (due megabyte) e puoi sovrascrivere questa impostazione usando .htaccess file pure. Due megabyte non sono molto conformi agli standard odierni, quindi potrebbe essere necessario aumentarlo. Se ottieni un errore il file supera upload_max_filesize quando si tenta di caricare un file, è necessario aumentare questo valore. Se lo fai, assicurati di aumentare anche post_max_size (vedi sotto). 

upload_tmp_dir

Imposta una directory temporanea che verrà utilizzata per archiviare i file caricati. Nella maggior parte dei casi, non è necessario preoccuparsi di questa impostazione. Se non lo si imposta, verrà utilizzata la directory temporanea predefinita di sistema.

post_max_size

Il post_max_size direttiva consente di configurare la dimensione massima dei dati POST. Poiché i file vengono caricati con richieste POST, questo valore deve essere maggiore di quello impostato per upload_max_filesize direttiva. Ad esempio, se il tuo upload_max_filesize è 16M (16 megabyte), potresti voler impostare post_max_size20M.

max_file_uploads

Ti consente di impostare il numero massimo di file che possono essere caricati alla volta. L'impostazione predefinita è 20, una quantità ragionevole.

max_input_time

È il numero massimo di secondi in cui uno script può analizzare i dati di input. Dovresti impostarlo su un valore ragionevole se hai a che fare con caricamenti di file di grandi dimensioni. 60 (60 secondi) è un buon valore per la maggior parte delle app.

memory_limit

Il memory_limit direttiva indica la quantità massima di memoria che uno script può consumare. Se stai riscontrando problemi durante il caricamento di file di grandi dimensioni, devi assicurarti che il valore di questa direttiva sia maggiore di quello che hai impostato per post_max_size direttiva. Il valore predefinito è 128M (128 megabyte), quindi a meno che tu non abbia un grande post_max_sizeupload_max_filesize, non devi preoccuparti di questo.

max_execution_time

È il numero massimo di secondi consentiti per lo script. Se si riscontrano problemi durante il caricamento di file di grandi dimensioni, è possibile valutare l'aumento di questo valore. 30 (30 secondi) dovrebbe funzionare bene per la maggior parte delle app.

Ora costruiamo un esempio reale per dimostrare il caricamento di file in PHP.

Crea il modulo HTML

Una volta configurate le impostazioni PHP, sei pronto per provare le funzionalità di caricamento dei file PHP.

Il nostro repository GitHub ha un codice di esempio che ho intenzione di discutere in questo articolo. Quindi, se vuoi seguire, vai avanti e scaricalo da GitHub.

Creeremo due file PHP: index.php e upload.php. Il index.php il file contiene il codice che è responsabile della visualizzazione del modulo di caricamento del file. D'altra parte, il upload.php il file è responsabile del caricamento di un file sul server.

Inoltre, un file verrà caricato nel Uploaded_files directory, quindi è necessario assicurarsi che questa cartella esista e sia scrivibile da server web utente.

In questa sezione, passeremo attraverso le parti chiave del index.php file.

Diamo un'occhiata al index.php file su GitHub:

    Caricamento file PHP   %S', $ _SESSION [' messaggio ']); unset ($ _ [ 'messaggio'] SESSION); ?> 
Caricare un file:

Sebbene possa sembrare un tipico modulo PHP, c'è un'importante differenza nel valore di enctype attributo del

etichetta. Deve essere impostato su / Form-data multipart dal momento che il modulo contiene il campo del file.

Il enctype attributo specifica il tipo di codifica da utilizzare quando viene inviato il modulo e accetta uno dei seguenti tre valori:

  • application / x-www-form-urlencoded: Questo è il valore predefinito quando non si imposta il valore di enctype attributo esplicitamente In questo caso, i caratteri vengono codificati prima di essere inviati al server. Se non si dispone del campo file nel modulo, è necessario utilizzare questo valore per enctype attributo.
  • / Form-data multipart: Quando usi il / Form-data multipart valore per il enctypeattributo, ti permette di caricare file usando il metodo POST. Inoltre, si assicura che i caratteri non siano codificati quando il modulo viene inviato.
  • text / plain: In genere non viene utilizzato. Con questa impostazione, i dati vengono inviati non codificati.

Successivamente, viene visualizzato il campo del file, che consente di selezionare un file dal computer.

 

Oltre a ciò, abbiamo visualizzato un messaggio nella parte superiore del modulo. Questo messaggio mostra lo stato del caricamento del file e verrà impostato in una variabile di sessione da upload.php script. Vedremo di più nella prossima sezione.

%S', $ _SESSION [' messaggio ']); unset ($ _ [ 'messaggio'] SESSION); ?>

In modo che riassume il index.php file. Nella prossima sezione vedremo come gestire il file caricato sul lato server.

Crea la logica di caricamento

Nella sezione precedente, abbiamo creato il modulo HTML che viene visualizzato sul lato client e consente di caricare un file dal tuo computer. In questa sezione vedremo la controparte lato server che ti consente di gestire il file caricato.

Inserisci il codice dal upload.php file su GitHub. Passeremo attraverso le parti importanti di quel file.

Nel upload.php file, abbiamo verificato se si tratta di una richiesta POST valida in primo luogo.

if (isset ($ _ POST ['uploadBtn']) && $ _POST ['uploadBtn'] == 'Upload') ...

In PHP, quando viene caricato un file, il file $ _FILES la variabile superglobale è popolata con tutte le informazioni sul file caricato. È inizializzato come una matrice e può contenere le seguenti informazioni per il corretto caricamento del file.

  • tmp_name: Il percorso temporaneo in cui il file è caricato è memorizzato in questa variabile.
  • nome: Il nome effettivo del file è memorizzato in questa variabile.
  • taglia: Indica la dimensione del file caricato in byte.
  • genere: Contiene il tipo mime del file caricato.
  • errore: Se si verifica un errore durante il caricamento del file, questa variabile viene popolata con il messaggio di errore appropriato. In caso di upload di file di successo, contiene 0, che puoi confrontare usando il UPLOAD_ERR_OK costante.

Dopo aver convalidato la richiesta POST, controlliamo che il caricamento del file sia andato a buon fine.

if (isset ($ _ FILES ['loadedFile']) && $ _FILES ['loadedFile'] ['error'] === UPLOAD_ERR_OK) ...

Puoi vedere che il $ _FILES variabile è un array multidimensionale, il primo elemento è il nome del campo del file e il secondo elemento ha le informazioni sul file caricato, come abbiamo appena discusso sopra.

Se il caricamento del file ha esito positivo, inizializziamo alcune variabili con informazioni sul file caricato.

// ottenere i dettagli del file caricato $ fileTmpPath = $ _FILES ['loadedFile'] ['tmp_name']; $ fileName = $ _FILES ['uploadedFile'] ['name']; $ fileSize = $ _FILES ['uploadedFile'] ['size']; $ fileType = $ _FILES ['loadedFile'] ['type']; $ fileNameCmps = explode (".", $ fileName); $ fileExtension = strtolower (end ($ fileNameCmps));

Nel frammento di cui sopra, abbiamo anche capito l'estensione del file caricato e l'abbiamo memorizzato nel file $ FileExtension variabile.

Poiché il file caricato può contenere spazi e altri caratteri speciali, è meglio disinfettare il nome del file, e questo è esattamente ciò che abbiamo fatto nel seguente snippet.

$ newFileName = md5 (time (). $ fileName). '' . $ FileExtension;

È importante limitare il tipo di file che può essere caricato su determinate estensioni e non consentire tutto utilizzando il modulo di caricamento. Lo abbiamo fatto controllando l'estensione del file caricato con una serie di estensioni che vogliamo consentire per il caricamento.

$ allowedfileExtensions = array ('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc'); if (in_array ($ fileExtension, $ allowedfileExtensions)) ...

Finalmente, usiamo il move_uploaded_file funzione per spostare il file caricato nella posizione specifica della nostra scelta.

// directory in cui verrà spostato il file caricato $ uploadFileDir = './uploaded_files/'; $ dest_path = $ uploadFileDir. $ Newfilename; if (move_uploaded_file ($ fileTmpPath, $ dest_path)) $ message = 'Il file è stato caricato con successo.';  else $ message = 'Si è verificato un errore durante lo spostamento del file nella directory di caricamento. Assicurati che la directory di caricamento sia scrivibile dal server web. '; 

Il move_uploaded_file la funzione richiede due argomenti. Il primo argomento è il nome file del file caricato e il secondo argomento è il percorso di destinazione in cui si desidera spostare il file.

Infine, reindirizziamo l'utente a index.php file. Inoltre, impostiamo il messaggio appropriato nella variabile di sessione, che verrà visualizzata agli utenti dopo il reindirizzamento nel index.php file.

Come funziona tutto insieme

Non dimenticare di creare il Uploaded_files directory e renderlo scrivibile dal server web utente. Quindi, vai avanti e avvia il index.php file, che dovrebbe visualizzare il modulo di caricamento del file che assomiglia a questo:

Clicca sul Navigare pulsante - che dovrebbe aprire una finestra di dialogo che consente di selezionare un file dal tuo computer. Seleziona un file con una delle estensioni consentite nel nostro script e fai clic su Caricare pulsante.

Questo dovrebbe inviare il modulo, e se tutto va bene, dovresti vedere il file caricato nel file Uploaded_files directory. Puoi anche provare a caricare altri file con estensioni non consentite e verificare se il nostro script impedisce tali caricamenti.

Conclusione

Oggi abbiamo discusso le basi del caricamento di file in PHP. Nella prima metà dell'articolo, abbiamo discusso le diverse opzioni di configurazione che devono essere presenti affinché il caricamento dei file funzioni. Poi abbiamo esaminato un esempio del mondo reale che ha dimostrato come funziona il caricamento di file in PHP.

Spero che questo articolo ti sia piaciuto e ti invitiamo a postare le tue domande e i tuoi suggerimenti di seguito!