PHP - Caricamento di file

Uno script PHP può essere utilizzato con un modulo HTML per consentire agli utenti di caricare file sul server. Inizialmente i file vengono caricati in una directory temporanea e quindi riposizionati in una destinazione di destinazione da uno script PHP.

Informazioni in phpinfo.php pagina descrive la directory temporanea utilizzata per il caricamento dei file come upload_tmp_dir e la dimensione massima consentita dei file che possono essere caricati è indicata come upload_max_filesize. Questi parametri sono impostati nel file di configurazione PHPphp.ini

Il processo di caricamento di un file segue questi passaggi:

  • L'utente apre la pagina contenente un modulo HTML con un file di testo, un pulsante Sfoglia e un pulsante Invia.

  • L'utente fa clic sul pulsante Sfoglia e seleziona un file da caricare dal PC locale.

  • Il percorso completo del file selezionato viene visualizzato nel testo archiviato, quindi l'utente fa clic sul pulsante di invio.

  • Il file selezionato viene inviato alla directory temporanea sul server.

  • Lo script PHP specificato come gestore del modulo nell'attributo di azione del modulo controlla che il file sia arrivato e quindi copia il file in una directory prevista.

  • Lo script PHP conferma il successo all'utente.

Come al solito durante la scrittura di file, è necessario che sia la posizione temporanea che quella finale abbiano le autorizzazioni impostate che consentono la scrittura dei file. Se uno dei due è impostato per essere di sola lettura, il processo fallirà.

Un file caricato potrebbe essere un file di testo, un file di immagine o qualsiasi documento.

Creazione di un modulo di caricamento

Il seguente codice HTM di seguito crea un modulo di caricamento. Questo modulo ha l'attributo del metodo impostato supost e l'attributo enctype è impostato su multipart/form-data

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>
      
   </body>
</html>

Produrrà il seguente risultato:

Creazione di uno script di caricamento

C'è una variabile PHP globale chiamata $_FILES. Questa variabile è un array a doppia dimensione associato e conserva tutte le informazioni relative al file caricato. Quindi, se il valore assegnato all'attributo name dell'input nel modulo di caricamento erafile, quindi PHP creerebbe le seguenti cinque variabili:

  • $_FILES['file']['tmp_name'] - il file caricato nella directory temporanea sul server web.

  • $_FILES['file']['name'] - il nome effettivo del file caricato.

  • $_FILES['file']['size'] - la dimensione in byte del file caricato.

  • $_FILES['file']['type'] - il tipo MIME del file caricato.

  • $_FILES['file']['error'] - il codice di errore associato a questo caricamento di file.

Esempio

L'esempio seguente dovrebbe consentire il caricamento delle immagini e restituire il risultato come informazioni sul file caricato.

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }
      
      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }
      
      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>
      
      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image" />
         <input type = "submit"/>
			
         <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul>
			
      </form>
      
   </body>
</html>

Produrrà il seguente risultato: