Fala pessoal, hoje irei ensinar a fazer upload de vários arquivos de uma vez, ou seja, ao invés de criar apenas um campo para o usuário selecionar o arquivo, vamos criar múltiplos campos e fazer o upload de cada arquivo para o servidor através do PHP.
Clique aqui para fazer download do código
1. Formulário
Vamos criar nosso formulário, vou utilizar aqui como exemplo cinco campos para upload:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Upload de vários arquivos com PHP</title> </head> <body> <h1>Upload de vários arquivos com PHP</h1> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data"> <p><input type="file" name="arquivo[]" /></p> <p><input type="file" name="arquivo[]" /></p> <p><input type="file" name="arquivo[]" /></p> <p><input type="file" name="arquivo[]" /></p> <p><input type="file" name="arquivo[]" /></p> <p><input type="submit" value="Enviar" /></p> </form> </body> </html>
Criamos um formulário e na action definimos que os dados serão enviados para o próprio arquivo, através do $_SERVER[‘PHP_SELF’]. Cada campo de upload receberá o mesmo nome, ou seja, arquivo, porém iremos colocar [] (colchetes) para que assim o php interprete como um array, onde cada arquivo receberá um índice e assim nós poderemos manipular esses arquivos.
* Lembrando que quando se trata de upload devemos definir a propriedade enctype=”multipart/form-data”;
2. Upload com PHP
Já que os dados serão enviados ao mesmo arquivo, vamos colocar nosso código PHP nesse mesmo arquivo, vou optar por colocá-lo entre o header 1 (h1) e o ínicio do formulário:
<?php // DEFINIÇÕES // Numero de campos de upload $numeroCampos = 5; // Tamanho máximo do arquivo (em bytes) $tamanhoMaximo = 1000000; // Extensões aceitas $extensoes = array(".doc", ".txt", ".pdf", ".docx"); // Caminho para onde o arquivo será enviado $caminho = "uploads/"; // Substituir arquivo já existente (true = sim; false = nao) $substituir = false; for ($i = 0; $i < $numeroCampos; $i++) { // Informações do arquivo enviado $nomeArquivo = $_FILES["arquivo"]["name"][$i]; $tamanhoArquivo = $_FILES["arquivo"]["size"][$i]; $nomeTemporario = $_FILES["arquivo"]["tmp_name"][$i]; // Verifica se o arquivo foi colocado no campo if (!empty($nomeArquivo)) { $erro = false; // Verifica se o tamanho do arquivo é maior que o permitido if ($tamanhoArquivo > $tamanhoMaximo) { $erro = "O arquivo " . $nomeArquivo . " não deve ultrapassar " . $tamanhoMaximo. " bytes"; } // Verifica se a extensão está entre as aceitas elseif (!in_array(strrchr($nomeArquivo, "."), $extensoes)) { $erro = "A extensão do arquivo <b>" . $nomeArquivo . "</b> não é válida"; } // Verifica se o arquivo existe e se é para substituir elseif (file_exists($caminho . $nomeArquivo) and !$substituir) { $erro = "O arquivo <b>" . $nomeArquivo . "</b> já existe"; } // Se não houver erro if (!$erro) { // Move o arquivo para o caminho definido move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo)); // Mensagem de sucesso echo "O arquivo <b>".$nomeArquivo."</b> foi enviado com sucesso. <br />"; } // Se houver erro else { // Mensagem de erro echo $erro . "<br />"; } } } ?>
Bom, apesar do código estar comentado, vou tentar detalhar o máximo possível:
Linha 4: Definimos o número de campos para enviar arquivo, no nosso caso, 5;
Linha 6: Definimos o tamanho máximo de cada arquivo, em bytes, no caso é equivalente a aproximadamente 1MB;
Linha 8: Definimos todas as extensões válidas e colocamos em um array;
Linha 10: Definimos a pasta onde os arquivos serão gravados (não esqueça de colocar uma / – barra – depois do nome da pasta);
Linha 12: Definimos se deve ser ou não substituido um arquivo já existente, quando false, o arquivo não será substituido, quando true, o arquivo será substituido;
Linha 14: Fazemos um loop para recuperar os dados, fazer a verificação e upload de cada campo de upload, o loop só irá terminar quando nosso contador ($i) for igual ao número de campos;
Linhas 17, 18, 19: Recuperamos as informações do arquivo do campo;
Linhas 27, 28, 29: Se o tamanho do arquivo for maior que o definido, será gerado um erro;
Linhas 31, 32, 33: Pegamos a extensão do arquivo através da função strrchr() e verificamos se ela está contida no array das extensões válidas, se não estiver, será gerado um erro;
Linhas 35, 36, 37: Verificamos se o arquivo já existe e se deve ser substituido ou não;
Linhas 40 a 45: Se não houver nenhum erro, movemos o arquivo que foi enviado para o caminho definido e exibimos a mensagem de sucesso, caso contrário um erro será exibido.
Bom, espero que vocês tenham entendido. Qualquer dúvida entre em contato, ok? Espero que esse artigo tenha sido útil a vocês, abraços.