Upload de arquivos com PHP
Neste post vamos aprender como fazer upload de arquivos com PHP.
No código abaixo você terá a possibilidade de validar a extensão, tamanho e renomear o arquivo – só serão permitidos arquivos PDF. Para permitir outros arquivos, basta mudar esta linha if( in_array( $extensao, array(“pdf”) ) ) para algo do tipo if( in_array( $extensao, array(‘jpg’, ‘jpeg’, ‘gif’, ‘png’) ) ).
O código está todo comentado e de fácil entendimento.
index.php
<!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Upload de arquivos com PHP</title> <!-- CDN Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head> <body> <div class="container"> <h1 class="text-center">Formulário de Upload de Arquivos</h1> <?php if ($msg != false) echo "<div class=\"alert $class\" role=\"alert\">$msg</div>"; ?> <form name="form" action="" method="post" enctype="multipart/form-data"> <input type="hidden" name="enviou" value="1"> Arquivo PDF:<br> <input type="file" name="arquivo"> <br><br> <input type="submit" class="btn btn-primary" value="Enviar"> </form> </div> </body> </html> |
<?php include "funcoes.php"; $msg = false; if( isset($_POST['enviou']) && $_POST['enviou'] == 1 ){ // arquivo $arquivo = $_FILES['arquivo']; // Tamanho máximo do arquivo (em Bytes) $tamanhoPermitido = 1024 * 1024 * 2; // 2Mb //Define o diretorio para onde enviaremos o arquivo $diretorio = "uploads/"; // verifica se arquivo foi enviado e sem erros if( $arquivo['error'] == UPLOAD_ERR_OK ){ // pego a extensão do arquivo $extensao = extensao($arquivo['name']); // valida a extensão if( in_array( $extensao, array("pdf") ) ){ // verifica tamanho do arquivo if ( $arquivo['size'] > $tamanhoPermitido ){ $msg = "<strong>Aviso!</strong> O arquivo enviado é muito grande, envie arquivos de até ".$tamanhoPermitido/MB." MB."; $class = "alert-warning"; }else{ // atribui novo nome ao arquivo $novo_nome = md5(time()).".".$extensao; // faz o upload $enviou = move_uploaded_file($_FILES['arquivo']['tmp_name'], $diretorio.$novo_nome); if($enviou){ $msg = "<strong>Sucesso!</strong> Arquivo enviado corretamente."; $class = "alert-success"; }else{ $msg = "<strong>Erro!</strong> Falha ao enviar o arquivo."; $class = "alert-danger"; } } }else{ $msg = "<strong>Erro!</strong> Somente arquivos PDF são permitidos."; $class = "alert-danger"; } }else{ $msg = "<strong>Atenção!</strong> Você deve enviar um arquivo."; $class = "alert-info"; } } ?> |
funcoes.php
<?php function extensao($arquivo){ $arquivo = strtolower($arquivo); $explode = explode(".", $arquivo); $arquivo = end($explode); return ($arquivo); } define('KB', 1024); define('MB', 1048576); // 1024 * 1024 define('GB', 1073741824); // 1024 * 1024 * 1024 define('TB', 1099511627776); // 1024 * 1024 * 1024 * 1024 ?> |
Olá Tiago,
Estou tentando fazer com que o arquivo seja anexado para ser enviado para um e-mail, mas não estou conseguindo. Teria como me dar um auxílio?
Grato.
Fala Daniel.
Já escrevi um post falando sobre isso e que pode te ajudar. Clique aqui para acessar.
Bom dia.
Coloco os dois primeiros arquivos com que nome?
Obrigado
Fala José.
Eu dividi o código, mas você pode colocar tudo dentro do arquivo index.php.
O segundo bloco que contém o código PHP, você coloca antes da tag </body>.
Boa tarde Tiago, tudo bem?
Gostaria de saber se há possibilidade do nome do arquivo ser igual ao do nome informado no preenchimento do formulário, pois tenho um formulário que receberá os dados atualizados dos funcionários e os mesmos irão adicionar os docs, mas na pasta ele grava com nome aleatório, e no caso são 460 funcionários rsrs
Obrigado desde já!
Fala Gustavo.
É bem simples. Vou te dar um exemplo:
Obrigado pelo feedback Tiago.
Estou com um problema: ao enviar o formulário, ele grava no BD as infos mas não sobe o pdf pra pasta. Estou usando fieldset e dentro dele por exemplo:
Nome:
Fiz o teste para o “Enviar Arquivo”, gravou no BD todas infos mas não subiu pra pasta o PDF.
OBS: coloquei o PHP antes do e subi tb o funcoes.php pro servidor.
Segue o campo Enviar Arquivos:
Arquivo PDF:
Obrigado pela atenção
Fala Gustavo.
Poderia informar se aparece alguma mensagem de erro.
Os alertas não estão aparecendo
bom dia.
como posso fazer o mesmo upload mas para uma pasta de rede interna?
quando faço o codigo para dentro da unidade C: dá ceto porém na pasta de um servidor de rede aparece o erro abaixo:
Warning: move_uploaded_file(C:\xampp\htdocs\engenhariaU:\teste/CANÁRIO 120 (P-53)/002.jpg): failed to open stream: No such file or directory in C:\xampp\htdocs\engenharia\Painel\pages\cadastro_desenho.php on line 24
Warning: move_uploaded_file(): Unable to move ‘C:\xampp\tmp\php19A2.tmp’ to ‘C:\xampp\htdocs\engenhariaU:\teste/CANÁRIO 120 (P-53)/002.jpg’ in C:\xampp\htdocs\engenharia\Painel\pages\cadastro_desenho.php on line 24
Bom dia Rodrigo,
pelo que entendi, você está enviando o arquivo para a unidade de rede U:
Tem um erro aqui C:\xampp\htdocs\engenhariaU:\teste/CANÁRIO 120 (P-53)/002.jpg
Bom Dia, sou novo como programador e estou utiizando este método para fazer upload de arquivo, mas não entou conseguindo fazer o Upload do arquivo não sei por qual motivo.
Todos os teste de falha deram, tanto tamanho, tipo de arquivo e todos dão certo mas o de sucesso não estou conseguindo.
Henrique,
você vai ter que depurar seu código.
Faz um teste. Após esta linha:
// faz o upload
$enviou = move_uploaded_file($_FILES[‘arquivo’][‘tmp_name’], $diretorio.$novo_nome);
coloque
var_dump($enviou);
exit();
e veja o que retorna.
Boa noite meu Caro @Tiago, estou com um problema que conserne no seguinte, tenciono fazer upload dos documentos de cada funcionario no formato pdf, sempre que cadastrar e visualizar o perfil de cada funcionar. em php or html.