PHP - upload de arquivo

Um script PHP pode ser usado com um formulário HTML para permitir que os usuários carreguem arquivos no servidor. Inicialmente, os arquivos são carregados em um diretório temporário e então realocados para um destino de destino por um script PHP.

Informação no phpinfo.php página descreve o diretório temporário que é usado para uploads de arquivos como upload_tmp_dir e o tamanho máximo permitido de arquivos que podem ser carregados é declarado como upload_max_filesize. Esses parâmetros são definidos no arquivo de configuração do PHPphp.ini

O processo de upload de um arquivo segue estas etapas -

  • O usuário abre a página que contém um formulário HTML com arquivos de texto, um botão de navegação e um botão de envio.

  • O usuário clica no botão de navegação e seleciona um arquivo para carregar do PC local.

  • O caminho completo para o arquivo selecionado aparece no campo de texto e o usuário clica no botão enviar.

  • O arquivo selecionado é enviado para o diretório temporário no servidor.

  • O script PHP que foi especificado como o manipulador de formulário no atributo action do formulário verifica se o arquivo chegou e o copia para um diretório pretendido.

  • O script PHP confirma o sucesso para o usuário.

Como de costume, ao gravar arquivos, é necessário que os locais temporário e final tenham permissões definidas para permitir a gravação de arquivos. Se qualquer um deles for definido como somente leitura, o processo falhará.

Um arquivo carregado pode ser um arquivo de texto ou arquivo de imagem ou qualquer documento.

Criação de um formulário de upload

O seguinte código HTM abaixo cria um formulário de upload. Este formulário tem o atributo de método definido comopost e o atributo enctype é definido como 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>

Isso produzirá o seguinte resultado -

Criação de um script de upload

Existe uma variável PHP global chamada $_FILES. Esta variável é um array de dupla dimensão associado e mantém todas as informações relacionadas ao arquivo carregado. Portanto, se o valor atribuído ao atributo de nome da entrada no formulário de upload foifile, então o PHP criaria as seguintes cinco variáveis ​​-

  • $_FILES['file']['tmp_name'] - o arquivo carregado no diretório temporário no servidor web.

  • $_FILES['file']['name'] - o nome real do arquivo carregado.

  • $_FILES['file']['size'] - o tamanho em bytes do arquivo enviado.

  • $_FILES['file']['type'] - o tipo MIME do arquivo carregado.

  • $_FILES['file']['error'] - o código de erro associado a este upload de arquivo.

Exemplo

O exemplo abaixo deve permitir o upload de imagens e devolver o resultado como informações do arquivo enviado.

<?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>

Isso produzirá o seguinte resultado -