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.