Upload de Arquivos no PHP

Através do PHP, você pode uploadar arquivos para o servidor.

Criar um formulário de upload de arquivos

Permitir que os usuários uploadem arquivos a partir do formulário é muito útil.

Veja o seguinte formulário HTML para upload de arquivos:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Nome do arquivo:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Enviar" />
</form>
</body>
</html>

Atenção às seguintes informações sobre este formulário:

A propriedade enctype do tag <form> determina qual tipo de conteúdo deve ser usado ao enviar o formulário. Quando o formulário precisa de dados binários, como conteúdo de arquivo, use "multipart/form-data".

A propriedade type="file" do标签 <input> determina que a entrada deve ser tratada como um arquivo. Por exemplo, ao visualizar no navegador, verá um botão de navegação ao lado da caixa de entrada.

Notas:Permitir que os usuários uploadem arquivos é um grande risco de segurança. Apenas permita que usuários confiáveis executem operações de upload de arquivos.

Criar um script de upload

"upload_file.php" arquivo contém o código para upload de arquivos:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Erro: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Tipo: " . $_FILES["file"]["type"] . "<br />";
  echo "Tamanho: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Armazenado em: " . $_FILES["file"]["tmp_name"];
  }
?>

Usando o array global $_FILES do PHP, você pode upload arquivos do computador do cliente para o servidor remoto.

O primeiro parâmetro é o nome do campo input do formulário, o segundo índice pode ser "name", "type", "size", "tmp_name" ou "error". Assim:

  • $_FILES["file"]["name"] - Nome do arquivo uploaded
  • $_FILES["file"]["type"] - Tipo do arquivo uploaded
  • $_FILES["file"]["size"] - Tamanho do arquivo uploaded, em bytes
  • $_FILES["file"]["tmp_name"] - Nome da cópia temporária do arquivo armazenado no servidor
  • $_FILES["file"]["error"] - Código de erro causado pelo upload de arquivo

Esta é uma maneira muito simples de upload de arquivo. Por considerar questões de segurança, você deve adicionar restrições sobre quais usuários têm permissão para upload de arquivos.

Restrições de upload

Neste script, aumentamos as restrições de upload de arquivo. O usuário pode apenas upload arquivos .gif ou .jpeg, e o tamanho do arquivo deve ser menor que 20 kb:

<?php
if ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Erro: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Tipo: " . $_FILES["file"]["type"] . "<br />";
    echo "Tamanho: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Armazenado em: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Arquivo inválido";
  }
?>

Notas:Para o IE, o tipo de arquivo jpg deve ser pjpeg, para o FireFox, deve ser jpeg.

Salvar arquivo uploaded

O exemplo acima criou uma cópia temporária do arquivo uploaded no diretório temporário do PHP do servidor.

Este arquivo de cópia temporária desaparecerá no final do script. Para salvar o arquivo uploaded, precisamos copiá-lo para outro local:

<?php
if ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Código de Retorno: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Tipo: " . $_FILES["file"]["type"] . "<br />";
    echo "Tamanho: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Arquivo temporário: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " já existe. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Armazenado em: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Arquivo inválido";
  }
?>

O script acima verifica se o arquivo já existe; se não existir, ele copia o arquivo para a pasta especificada.

Notas:Este exemplo salvou o arquivo em uma nova pasta chamada "upload".