Upload de arquivos usando PHP para o servidor. Upload de arquivos com PHP Como fazer upload de arquivos para o servidor php

Em quase todos os projetos, o desenvolvedor se depara com a necessidade de fazer upload de arquivos para o servidor. Fotos, imagens, documentos, arquivos e muito mais podem ser carregados no servidor por meio da interface da web (por meio de um navegador).


Http: //localhost/index.php? Name \u003d myname & page \u003d 10

define uma solicitação GET para a página index.php. Nesse caso, os parâmetros "nome" e "página" com os valores "meunome" e "10" são passados \u200b\u200bpara o script, respectivamente. Como você pode ver, a consulta consiste em pares "nome \u003d valor" concatenados com "&". A solicitação é separada do endereço da página por um ponto de interrogação "?".

Mas GET não é adequado para grandes transferências de dados. Existe um método POST para isso. Este método transmite dados ocultos do usuário e o endereço da página permanece inalterado. Em teoria, o método POST permite a transferência de grandes blocos de dados, mas a maioria dos provedores define um limite rígido de 5 a 10 megabytes.

Para implementar o upload de arquivo, você precisa fornecer ao usuário o formulário apropriado. A tag de entrada do tipo de arquivo é destinada ao upload de arquivos.

Selecione o arquivo para baixar:

O usuário seleciona o arquivo desejado, clica no botão "Enviar!", Após o qual o navegador transfere o arquivo especificado para o servidor. Quando o arquivo é carregado, o receiver.php é iniciado e todos os dados transferidos no formulário tornam-se automaticamente disponíveis para ele.

A lista de arquivos carregados é armazenada no array global $ _FILES. É uma matriz associativa, onde cada elemento contém a descrição de um dos arquivos. Vamos dar um exemplo:

3145728) ($ filesize \u003d ($ filesize! \u003d 0)? Sprintf ("(%. 2f MB)", $ filesize / 1024): ""; die ("Erro: O tamanho do arquivo anexado. $ Filesize." É maior do que o permitido (3 MB). ");) Else ($ filename \u003d $ _FILES [" arquivo "] [" nome "]; $ filepath \u003d $ _FILES [" arquivo "] [" tmp_name "]; $ filetype \u003d $ _FILES [" arquivo "] [" type "]; if ($ this-\u003e filetype \u003d\u003d null || $ this-\u003e filetype \u003d\u003d" ") $ this-\u003e filetype \u003d" desconhecido / desconhecido ";))) echo" Carregado com sucesso Arquivo: ". $ filename; ?\u003e

Todos os arquivos carregados são salvos pelo servidor em um diretório temporário e são excluídos automaticamente após a conclusão do script. Se você precisar salvar um arquivo no servidor, ele deve ser movido para um dos diretórios do site. Isso é feito com uma função especial move_uploaded_file ()... Geralmente é usado em conjunto com a função is_uploaded_file ()que permite determinar se o arquivo foi carregado por meio do formulário. Por exemplo:

As informações sobre cada arquivo carregado são apresentadas no script como elementos do array $ _FILES. O nome do elemento é determinado pelo atributo name da tag do formulário. No nosso caso, o atributo name é "ufile", o que significa que os dados sobre este arquivo serão armazenados no elemento $ _FILES ["ufile"].

Cada elemento $ _FILES também é uma matriz contendo cinco elementos de nome fixo:

O tamanho dos arquivos baixados pode variar significativamente de provedor para provedor. Alguns administradores proíbem totalmente o upload de arquivos. Neste caso, o arquivo ainda pode ser carregado, o servidor irá excluí-lo e o script notificará que o arquivo foi, mas já foi excluído.

Em PHP, você frequentemente precisa fazer upload de arquivos para o servidor ... é bom se o seu site tem a capacidade de fazer upload de arquivos para o site: imagens ou outros arquivos de texto ou outros formatos ... vamos falar sobre isso neste artigo ...

Portanto, precisamos aprender como fazer upload de um arquivo para o servidor com usando PHP... Para fazer isso, precisamos saber que esses downloads acontecem usando um simples formulários multiparte, que possui um campo especial para enviar um arquivo.




O parâmetro enctype em tal formato deve ser multipart / form-data. Enviado pelo método POST.

Como lidar com formulários multipartes em PHP

Após clicar no botão Download, o PHP coloca o arquivo em um diretório temporário e atribui um nome temporário ao arquivo (é diferente do baixado - será visto a seguir). E imediatamente 4 variáveis \u200b\u200bdo array global $ _FILES são criadas:

  • $ _FILES ["uploadfile"] ["nome"] - o nome do arquivo antes de ser enviado ao servidor (ou seja, o original);
  • $ _FILES ["uploadfile"] ["tamanho"] - o tamanho do arquivo recebido em bytes;
  • $ _FILES ["uploadfile"] ["tipo"] - Tipo MIME do arquivo recebido (se o navegador foi capaz de determinar), por exemplo: imagem / gif, imagem / png, imagem / jpeg, texto / html;
  • $ _FILES ["uploadfile"] ["tmp_name"] - contém o nome do arquivo no diretório temporário, por exemplo: / tmp / php57Opq2Y;
  • $ _FILES ["uploadfile"] ["error"] - Um código de erro que pode ocorrer ao enviar um arquivo. Chave ["erro"] foi adicionado no PHP 4.2.0.

Nota: após o final do script para enviar o arquivo para o servidor - o arquivo temporário será excluído, então você precisa copiar este arquivo do diretório temporário para alguma pasta, por exemplo, arquivos usando a função cópia de (); Não há necessidade de usar a função move (), pois a cópia neste momento tem 2 vantagens: o arquivo temporário será excluído por conta própria, e se o diretório temporário estiver localizado em outro meio, um erro será exibido.

pronto: o processo deve iniciar quando o botão "Upload" for clicado, ou seja, por exemplo: if ($ _ POST ["enviar"]) (então realizar as ações)

Uma imagem que mostrará claramente as 4 variáveis \u200b\u200bcriadas do array global $ _FILES:

Acho que agora está tudo claro para você, o que vai para onde e o que é criado onde ... e então eu manipulo esses campos, podemos começar a trabalhar com esse formulário em php

O próprio script pode ser parecido com isto:

if ($ _ POST ["enviar"]) (
@mkdir ("arquivos", 0777); // cria uma pasta, se ela não existir então não haverá erro, defina os direitos

/ * echo "

";
print_r ($ _ FILES);
echo "
";*/
$ uploaddir \u003d "arquivos /";
$ uploadfile \u003d $ uploaddir.basename ($ _ FILES ["uploadfile"] ["nome"]);

If (copy ($ _ FILES ["uploadfile"] ["tmp_name"], $ uploadfile)) (
echo "

O arquivo foi enviado com sucesso para o servidor

";
) outro (
echo "

Falha ao fazer upload do arquivo para o servidor

";
Saída;
}

// Dados sobre o arquivo carregado
echo "

Informações sobre o arquivo enviado ao servidor:

";
echo "

Nome original do arquivo enviado: ". $ _ FILES [" uploadfile "] [" nome "]."

";
echo "

Tipo MIME do arquivo enviado: ". $ _ FILES [" uploadfile "] [" tipo "]."

";
echo "

O tamanho do arquivo enviado em bytes: ". $ _ FILES [" uploadfile "] [" tamanho "]."

";
echo "

Nome do arquivo temporário: ". $ _ FILES [" uploadfile "] [" tmp_name "]."

";
}

É assim que ocorre o processo de upload de um arquivo para o servidor por meio do PHP.

Espero que tenha sido útil para alguém!

Como fazer upload de um arquivo para um servidor usando PHP? Neste artigo, examinaremos mais de perto esse problema com exemplos.

Formulário HTML para enviar o arquivo

A primeira coisa a saber para fazer upload de arquivos para o servidor são os detalhes dos formulários HTML que enviam o arquivo.

Aqui está um exemplo de HTML para tal formulário:

Formulário de upload de arquivo





O que é único neste formulário:

  1. A tag do formulário deve conter o atributo enctype \u003d "multipart / form-data. Este atributo indica que o formulário enviará o arquivo. Por padrão, o atributo enctype é definido como application / x-www-form-urlencoded.
  2. O formulário deve conter um atributo oculto (type \u003d "hidden") denominado MAX_FILE_SIZE cujo valor (valor) indica o tamanho do arquivo. Em teoria, os navegadores deveriam relatar que o arquivo está fora do tamanho, mas na prática os navegadores não suportam isso. Acho que esse atributo pode ser omitido.
  3. Para selecionar o arquivo a ser transferido, use a tag input, que possui o atributo type \u003d "file".

Depois que o servidor recebe uma solicitação HTTP desse formulário, ele grava o arquivo em uma pasta temporária no servidor.

Se você deseja que o arquivo seja salvo em um diretório diferente neste estágio, especifique-o na diretiva upload_tmp_dir do arquivo php.ini.

A função move_uploaded_file é usada para mover o arquivo carregado para um novo local.

Mas antes de começar a trabalhar com esta função, devemos examinar o array bidimensional $ _FILES, por meio do qual temos acesso às características do arquivo carregado.

Portanto, após o script receber os dados do formulário com o arquivo transferido, ele gravou o arquivo em uma pasta especial e gravou os dados sobre o arquivo no array bidimensional $ _FILES.

Vejamos um exemplo que imprime o conteúdo do array $ _FILES na tela.

Formulário de upload de arquivo


";) else (echo"
", print_r ($ _ FILES),"
"; } ?>

Isso é o que obtemos como resultado deste script:

Figura 1. Array $ _FILES.

Agora, vamos dar uma olhada no que está contido neste array.

Nosso array bidimensional $ _FILES tem um nome de arquivo de elemento. Este é o valor do campo de nome do elemento do formulário:

Dados para este arquivo:

  • $ _FILES ["nome do arquivo"] ["nome"] - nome do arquivo;
  • $ _FILES ["nome do arquivo"] ["tipo"] - tipo de arquivo;
  • $ _FILES ["filename"] ["tmp_name"] - caminho completo para o diretório temporário no disco;
  • $ _FILES ["filename"] ["error"] - contém o código do erro, que é 0 se a operação foi bem sucedida;
  • $ _FILES ["filename"] ["size"] - tamanho do arquivo.

Seria possível especificar dois campos para arquivos no formulário, por exemplo:


Nesse caso, nosso array ficaria assim:


Figura 2. Array $ _FILES.

Portanto, agora sabemos como o array $ _FILES funciona e o próximo passo é colocar o arquivo resultante no lugar que precisamos.

Função Move_uploaded_file

Como já escrevi, a função move_uploaded_file é usada para mover o arquivo carregado para um novo local.

A sintaxe da função move_uploaded_file é:

move_uploaded_file (para onde mover, para onde mover)

A função move_uploaded_file retorna um valor booleano:

  • TRUE se bem-sucedido
  • FALSE - se o primeiro argumento for um arquivo carregado, mas por algum motivo não puder ser movido para o local especificado, neste caso nenhuma ação será executada.

Vamos usar esta função no exemplo:

Formulário de upload de arquivo


";) else (move_uploaded_file ($ _FILES [" nome do arquivo "] [" tmp_name "], __DIR__. DIRECTORY_SEPARATOR. $ _FILES [" nome do arquivo "] [" nome "]);)?\u003e

Este script move a imagem para a mesma pasta em que está localizada. Para fazer isso, usamos constantes integradas do PHP para especificar o caminho:

  • __DIR__ é uma das constantes "mágicas", contém o diretório do arquivo.
  • DIRECTORY_SEPARATOR é uma constante predefinida que contém o separador de caminho. Para Windows é "\\", para Linux e outros - "/".

Observação: se o arquivo resultante já existir, ele será sobrescrito.

Função Is_uploaded_file

Existe mais uma função que deve ser usada ao trabalhar com o upload de arquivos para o servidor. Esta é a função is_uploaded_file e é usada por razões de segurança.

is_uploaded_file - determina se o arquivo foi carregado usando HTTP POST e retorna TRUE em caso afirmativo.

O uso desta função é útil para garantir que um usuário malicioso não esteja tentando enganar o script para que ele trabalhe em arquivos com os quais não deveria funcionar - por exemplo, / etc / passwd.

Observação: para que a função is_uploaded_file funcione corretamente, você precisa passar o caminho para o arquivo no armazenamento temporário no servidor, ou seja, um argumento como $ _FILES ["filename"] ["tmp_name"], mas o nome do arquivo carregado na máquina cliente ($ _FILES [" filename "] [" name "]) não funciona aqui.

Nosso script de exemplo final que processa o formulário de envio de arquivo ficaria assim:

Formulário de upload de arquivo


";) else (// Verifique se o arquivo foi enviado if (is_uploaded_file ($ _ FILES [" filename "] [" tmp_name "])) (// Se o arquivo foi enviado com sucesso, mova-o // do diretório temporário para o último move_uploaded_file ($ _FILES ["nome do arquivo"] ["nome_tmp"], __DIR__. DIRECTORY_SEPARATOR. $ _FILES ["nome do arquivo"] ["nome"]);) else (echo ("Erro ao carregar arquivo");))?\u003e

Limitando o tamanho do arquivo

Em alguns casos, você precisa limitar o tamanho do arquivo que pode ser carregado no servidor. Por exemplo, para permitir o upload somente de arquivos com tamanho de no máximo 3 MB para o servidor, o seguinte script contém o código:

1024 * 3 * 1024) (echo ("O tamanho do arquivo excede três megabytes"); sair;) ...?\u003e

O tamanho máximo de upload de arquivo também pode ser definido usando a diretiva upload_max_filesize no arquivo php.ini. O valor padrão desta diretiva é 2 MB:

$ upload_max_filesize) ...?\u003e

Configurações do Php.ini para enviar arquivos ao servidor

Portanto, aprendemos sobre a diretiva upload_max_filesize do arquivo php.ini, que define o tamanho máximo do arquivo enviado. Quais outras diretivas de arquivo php.ini são responsáveis \u200b\u200bpor enviar arquivos para o servidor?

A propósito, se você deseja descobrir onde seu arquivo php.ini está localizado, execute o script:

Portanto, a lista de diretivas do arquivo php.ini:

  • file_uploads - a capacidade de proibir ou permitir o upload de arquivos para o servidor como um todo, habilitado por padrão (valor Ativado).
  • post_max_size - limite superior geral do tamanho dos dados transmitidos em uma solicitação POST. Se você precisar transferir vários arquivos ao mesmo tempo, ou trabalhar com arquivos grandes, mude o valor desta diretiva. O padrão é 8 MB.
  • upload_max_filesize é a diretiva que já consideramos. Lembre-se de alterar também post_max_size se necessário.
  • upload_tmp_dir - diretório temporário no servidor onde todos os arquivos carregados serão colocados.

Isso é tudo que eu queria dizer sobre "Upload de arquivos para o servidor em PHP".


O que pode ser comum entre as fotos em um álbum de fotos online, anexado a um e-mail ou arquivos apresentados em um aplicativo de lote online? Todos eles devem ser carregados no servidor via Internet a partir de um navegador da web. Na verdade, o upload de arquivos é um recurso importante de muitos sites e aplicativos da web que usamos diariamente. Este artigo mostrará como adicionar suporte para upload de arquivos ao seu site usando PHP.

Requisitos antes de enviar arquivos

O processamento de arquivos carregados é um processo padrão, mas existem algumas pequenas coisas que você precisa prestar atenção antes de começar. A primeira coisa a fazer é certificar-se de que o PHP está configurado para permitir uploads de arquivos. Para fazer isso, no php.ini vale a pena verificar a diretiva file_uploads e, se estiver desabilitada, habilite-a.

File_uploads \u003d On

Os arquivos baixados são salvos primeiro em um diretório temporário (mas não se preocupe ... seu script PHP pode mover os arquivos posteriormente para um local mais adequado). O local original é o diretório temporário padrão do sistema. Você pode especificar um diretório diferente usando a diretiva upload_tmp_dir no php.ini. Independentemente disso, é uma boa ideia verificar se o processo PHP tem as permissões de gravação corretas com base no diretório que está sendo usado.

Upload_tmp_dir \u003d "/ tmp" [email protegido]: ~ $ ls -l / | grep tmp drwxrwxrwt 13 root root 40960 2011-08-31 00:50 tmp

Depois de ter certeza de que a configuração permite que o servidor aceite os arquivos carregados, você pode se concentrar nos detalhes e adicionar um formulário HTML. É imperativo que seu item

usou o método POST e tinha o atributo enctype definido como multipart / form-data.

Estágios de upload de um arquivo para o servidor

Provavelmente, você já pode imaginar como os arquivos são carregados para o servidor, com base em sua própria experiência e nos requisitos que mencionei acima.

  • O visitante visualiza uma página HTML com um formulário especialmente escrito para suportar uploads de arquivos;
  • Em seguida, ele fornece o arquivo que deseja baixar e clica no botão enviar;
  • O navegador codifica o arquivo e o envia como parte da solicitação POST;
  • O PHP recebe o formulário de envio, decodifica o arquivo e o armazena em um local temporário no servidor;
  • O script PHP escrito responsável por processar a postagem do formulário valida o arquivo e o processa de alguma forma, geralmente movendo-o de seu local temporário para o local permanente onde o arquivo será armazenado.

Para adicionar suporte para uploads de arquivos, você precisa criar um formulário HTML a ser apresentado ao usuário e um script PHP para cuidar do arquivo carregado no servidor.

Adicione um formulário HTML para fazer upload de um arquivo

Os formulários HTML fornecem uma interface por meio da qual o usuário inicia um upload de arquivo. Deve ser lembrado que o elemento deve ter seu atributo method definido para post e seu atributo enctype definido para multipart / form-data. Elemento arquivo fornece um campo usado para especificar o arquivo a ser carregado. Como qualquer outro elemento de formulário, é importante incluir o atributo name para que você possa se referir a ele no script PHP que processa o formulário.

Esta é a aparência de uma marcação típica de formulário de upload de arquivo:


É importante notar que navegadores diferentes irão processar o campo de upload de arquivo de forma diferente. IE, Firefox e Opera o exibem como uma caixa de texto com um botão próximo a ele que diz Navegar ou Selecionar. O Safari o exibe da mesma forma que um botão que diz Escolher arquivo. De modo geral, isso não é um problema, pois os usuários estão acostumados com a forma como o campo é exibido em seus navegadores e sabem como usá-lo. Às vezes, porém, você encontrará um cliente ou designer que o retrata inflexivelmente de uma determinada maneira. A quantidade de CSS e JavaScript que pode ser aplicada a um campo de arquivo é extremamente limitada devido a considerações de segurança impostas pelos navegadores. Digitar um arquivo pode ser difícil. E se aparência é muito importante para você, recomendo que leia um dos artigos Tipo de entrada "Peter-Paul Koch" \u003d "arquivo".

Vá para o servidor e trabalhe com PHP

As informações de upload de arquivo são fornecidas usando o array multidimensional $ _FILES. Este array tem sua própria estrutura, nomes atribuídos aos campos do arquivo no formulário HTML, assim como ao trabalhar com $ _GET e $ _POST. Então, a matriz de cada arquivo contém os seguintes elementos:

  • $ _FILES ["meuArquivo"] ["nome"] - armazena o nome do arquivo original;
  • $ _FILES ["myFile"] ["type"] - salva o tipo MIME do arquivo;
  • $ _FILES ["myFile"] ["size"] - salva o tamanho do arquivo (em bytes);
  • $ _FILES ["myFile"] ["tmp_name"] - armazena o nome do arquivo temporário;
  • $ _FILES ["myFile"] ["error"] - armazena o código de erro recebido como resultado da transferência.

Com a função move_uploaded_file (), podemos mover um arquivo de nosso diretório temporário para um local permanente. Também é uma boa prática usá-lo em vez de copy () e rename () para esse propósito, pois ele executa verificações adicionais para garantir que o arquivo foi realmente carregado com uma solicitação HTTP POST.

Se você for salvar o arquivo com o nome original fornecido pelo usuário, recomendamos que verifique se é seguro. O nome do arquivo não deve conter caracteres que possam afetar o caminho de destino, como uma barra (barra). O nome do arquivo deve ser exclusivo para evitar sobrescrever os existentes com o mesmo nome (se não for fornecido pelo seu aplicativo). Isso pode ser garantido substituindo qualquer caractere por um sublinhado que não seja uma letra e, em seguida, adicionando um número crescente se já existir um arquivo com esse nome.

É assim que o PHP obtém e processa o upload de um arquivo:

Define ("UPLOAD_DIR", "/ srv / www / uploads /"); if (! empty ($ _ FILES ["meuArquivo"])) ($ meuArquivo \u003d $ _FILES ["meuArquivo"]; if ($ meuArquivo ["erro"]! \u003d\u003d UPLOAD_ERR_OK) (echo "

Ocorreu um erro.

"; exit;) // forneça um nome de arquivo seguro $ name \u003d preg_replace (" / [^ A-Z0-9 ._-] / i "," _ ", $ myFile [" name "]); // não substitua arquivo existente $ i \u003d 0; $ parts \u003d pathinfo ($ name); while (file_exists (UPLOAD_DIR. $ name)) ($ i ++; $ name \u003d $ parts ["filename"]. "-". $ i. ". ". $ parts [" extension "];) // salva o arquivo do diretório temporário $ success \u003d move_uploaded_file ($ myFile [" tmp_name "], UPLOAD_DIR. $ name); if (! $ success) (echo" "; sair; ) // definir as permissões corretas para o novo arquivo chmod (UPLOAD_DIR. $ name, 0644);)

Primeiro, certificamo-nos de que o upload do arquivo em PHP para o servidor ocorra sem problemas. Em seguida, definimos um nome de arquivo seguro como acabei de descrever e movemos o arquivo para seu diretório final usando move_uploaded_file (). Finalmente, fazemos uma chamada para chmod () para nos certificarmos de que as permissões necessárias sejam definidas no novo arquivo.

Questões de segurança

Uma delas é verificar o tipo de arquivo baixado, qual deve ser. Não é seguro confiar no valor de $ _FILES ["myFile"] ["type"] ou na extensão do nome do arquivo, pois ambos podem ser facilmente falsificados. Em vez disso, use a função exif_imagetype () para inspecionar o conteúdo do arquivo e determinar se ele é de fato GIF, JPEG ou um dos vários outros formatos de imagem suportados. Se exif_imagetype () não estiver disponível (a função requer que a extensão Exif esteja habilitada), você pode usar getimagesize (). A matriz retornada a ele conterá o tipo de imagem, se reconhecido.

// verifique o arquivo GIF, JPEG ou PNG $ fileType \u003d exif_imagetype ($ _ FILES ["myFile"] ["tmp_name"]); $ permitido \u003d matriz (IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); if (! in_array ($ fileType, $ allowed)) (// tipo de arquivo não permitido ...

Para arquivos sem imagem, você pode usar exec () para chamar o utilitário de arquivos unix. ele determina o tipo de arquivo procurando por assinaturas binárias conhecidas nos locais esperados.

// verifique o arquivo PDF $ mime \u003d "application / pdf; charset \u003d binary"; exec ("arquivo -bi". $ _FILES ["meuArquivo"] ["tmp_name"], $ out); if ($ out! \u003d $ mime) (// não é um arquivo PDF ...

Outra etapa que você pode realizar é impor limites rígidos ao tamanho total da solicitação POST e ao número de arquivos que podem ser carregados. Para fazer isso, especifique o valor apropriado para as diretivas upload_max_size, post_max_size e max_file_uploads no php.ini. A diretiva upload_max_size especifica o tamanho máximo de upload de arquivo. Além do tamanho do upload, você pode limitar o tamanho de toda a solicitação POST com a diretiva post_max_size. max_file_uploads é uma nova diretiva (adicionada na versão 5.2.12) que limita o número de uploads de arquivos. Essas três diretivas ajudam a proteger seu site de ataques que tentam atrapalhar a acessibilidade, causando tráfego intenso na rede ou carga do sistema.

Post_max_size \u003d 8M upload_max_size \u003d 2M max_file_uploads \u003d 20

A terceira etapa que você pode realizar para minimizar o risco é verificar os arquivos baixados com um antivírus. Isso é vital para a proteção contra vírus e malware comuns, especialmente se o seu site estiver compartilhando arquivos entre diferentes pessoas, como um anexo para um cliente de webmail ou um site de compartilhamento (legal) de arquivos. Existe uma extensão PHP que fornece acesso ao ClamAV, mas é claro que você pode invocar o utilitário linha de comando ClamAV é o mesmo que demonstrei para o arquivo.

Exec ("clamscan --stdout". $ _FILES ["myFile"] ["tmp_name"], $ out, $ return); if ($ return) (// arquivo está infectado ...

Resumindo e tirando conclusões

Hoje você aprendeu como é realizado o processo de configuração e de envio de arquivos do seu site ou aplicativo da web para o servidor. Para que o upload seja bem-sucedido, o formulário HTML deve ser enviado por meio de uma solicitação POST com formatação de dados múltiplos, e o PHP deve permitir uploads conforme especificado usando a diretiva file_uploads. Após a migração do arquivo, o script responsável por manipular o upload usa as informações encontradas no array $ _FILES para mover o arquivo do diretório temporário para o local desejado. Também compartilhei alguns cuidados adicionais que você pode tomar para se proteger e a seus usuários contra alguns dos riscos associados ao download de arquivos. Para garantir sua segurança - verifique o tipo de arquivo, imponha restrições estritas ao carregamento do tráfego e aplique uma verificação de vírus.

Para aqueles que possam estar interessados, um código adicional para este artigo está disponível no GitHub. Você pode navegar, baixar ou clonar o repositório e brincar com o código para entender melhor como funciona o processo de upload de arquivos.

Última atualização: 11.1.2015

Para fazer upload de um arquivo para o servidor, precisamos usar um formulário com o parâmetro enctype \u003d "multipart / form-data" e o array $ _FILES. Então, vamos criar um arquivo upload.php com o seguinte conteúdo:

Upload de arquivo

Selecione um arquivo:



Isso define um formulário com o atributo enctype \u003d "multipart / form-data". O formulário contém um campo especial para selecionar um arquivo.

Todos os arquivos enviados caem em uma matriz associativa $ _FILES... Para determinar se há algum arquivo carregado, você pode usar a instrução if: if ($ _FILES)

O array $ _FILES é bidimensional. Podemos carregar vários arquivos, e cada arquivo carregado pode ser recuperado por uma chave que corresponda ao valor do atributo name.

Como o elemento para carregar um arquivo no formulário tem name \u003d "filename", podemos obter este arquivo usando a expressão $ _FILES ["filename"].

Cada objeto de arquivo tem seus próprios parâmetros que podemos obter:

    $ _FILES ["arquivo"] ["nome"]: nome do arquivo

    $ _FILES ["arquivo"] ["tipo"]: tipo de conteúdo do arquivo, por exemplo, imagem / jpeg

    $ _FILES ["arquivo"] ["tamanho"]: tamanho do arquivo em bytes

    $ _FILES ["file"] ["tmp_name"]: nome de um arquivo temporário salvo no servidor

    $ _FILES ["arquivo"] ["erro"]: download do código de erro

Também podemos verificar se há erros durante o carregamento. Se não tivermos um erro, o campo $ _FILES ["filename"] ["error"] contém o valor UPLOAD_ERR_OK.

Quando um arquivo é carregado para o servidor, ele é primeiro carregado para um local temporário, de onde é movido para o diretório do servidor usando a função move_uploaded_file ().

A função move_uploaded_file () leva dois parâmetros, o caminho para o arquivo temporário carregado e o caminho onde o arquivo carregado deve ser colocado.

Restrições de inicialização e personalização

Por padrão, o tamanho dos arquivos carregados é limitado a 2 MB. No entanto, você pode configurar essa métrica no arquivo de configuração. Vamos mudar esse valor, por exemplo, para 10 MB. Para fazer isso, encontre no arquivo php.ini a seguinte linha:

Upload_max_filesize \u003d 2M

Vamos mudar para

Upload_max_filesize \u003d 10M

Também podemos configurar uma pasta para downloads temporários. Para fazer isso, no arquivo php.ini encontre a seguinte linha:

; upload_tmp_dir \u003d

Vamos mudar para

Upload_tmp_dir \u003d "C: / php / upload"

Também no diretório php, precisamos criar uma pasta de upload.

Multiboot

Vamos mudar o script upload.php para que ele suporte múltiplos downloads:

$ error) (if ($ error \u003d\u003d UPLOAD_ERR_OK) ($ tmp_name \u003d $ _FILES ["uploads"] ["tmp_name"] [$ key]; $ name \u003d $ _FILES ["uploads"] ["name"] [$ key]; move_uploaded_file ($ tmp_name, "$ name");)))?\u003e

Upload de arquivo






Cada campo de seleção de arquivo tem um atributo name \u003d "uploads", então o servidor tratará o conjunto de arquivos carregados como uma única matriz.

Então, usando um loop foreach, percorremos todos os arquivos e os salvamos no diretório do site.