Forçar download ao invés da exibição

Atenção
Este artigo está defasado, ou seja, pode apresentar uma ou mais falhas de segurança. Para visualizar sua versão aprimorada, clique aqui.
Caso MESMO ASSIM você deseje visualizar esta versão, continue por SUA CONTA E RISCO.

Conceito

Muitas vezes, disponibilizamos em nossos sites coisas como imagens, pdfs, arquivos html ou qualquer outro tipo de arquivo que o navegador consiga abrir diretamente. Às vezes não é exatamente isso que queremos. Um PDF que abre no navegador pode tornar-se um grande inconveniente, já que deixa todo o computador lento…

Hoje iremos aprender como forçar um arquivo a ser baixado sem ter que zipa-lo. :P

Mão na massa

A rotina é simples e objetiva. A idéia é indicar para o navegador que o arquivo deve ser baixado e, em seguida, enviar todo o conteúdo para o buffer de saída.

<!--?php<br /-->	$arquivo = 'curriculo.pdf';
	header ("Content-type: octet/stream");
	header ("Content-disposition: attachment; filename=".$arquivo.";");
	header("Content-Length: ".filesize($arquivo));
	readfile($arquivo);
	exit;
?>

Sendo assim, acessando o arquivo com o código acima, será efetuado o download de “curriculo.pdf”.

Outro modo de fazer seria com o nome da arquivo variável, sendo passado por GET:

<!--?php<br /-->	$arquivo = $_GET['arquivo'];
	if (!file_exists($arquivo))
		exit;

	header ('Content-type: octet/stream');
	header ('Content-disposition: attachment; filename='.$arquivo.';');
	header ('Content-Length: '.filesize($arquivo));
	readfile($arquivo);
	exit;
?>

Digamos que temos que salvar este arquivo como “download.php”, um link para baixa ro arquivo anterior ficaria desta maneira.

<a href="download.php?arquivo=curriculo.pdf">Clique para baixar o curriculo</a>

É bem simples e funcional. Note que você deve ter os arquivos para download no mesmo diretório que o arquivo PHP. Caso estejam em diretórios diferentes, você deve especificar isto no código.

Atenção!

Se você testar este código no Internet Explorer 6 e não aparecer nome do arquivo na hora de baixar, ou seja, aparecer o nome do script (Ex.: download.php), você deve apenas remover a linha que envia o header “Content-type: octet/stream” e tudo deverá estar resolvido!

Conclusão

Nem sempre tudo que parece, é. As vezes um problema qua aparenta ser imenso, pode ser resolvido de uma maneira muito fácil. O ser humano é que tende a complicar o que é simples.

Despeço-me desejando a todos um ótimo ano e aguardando sugestões para mais artigos!
Um grande abraço e fiquem com Deus!

Esta entrada foi publicada em Dicas. Adicione o link permanente aos seus favoritos.

16 pessoas já comentaram! Tá esperando o quê?

  1.  
    Xorna disse:

    Cara, show de bola esse artigo, essa era uma dúvida que eu tinha, mas por falta de vontade sequer fui atrás, mas agora todos sabemos… graças ao tio rafa =)

    parabéns!

    abraço

    Utilizando Mozilla Firefox Mozilla Firefox 2.0.0.11 no Windows Windows Vista
  2.  
    André disse:

    Bah, não sabia que dava pra fazer um troço desses. Legal até :)

    Mas eu prefiro zipar :P

    Tri massa, abraço!

    Utilizando Mozilla Firefox Mozilla Firefox 2.0.0.11 no Windows Windows Vista
  3.  
    Diogo disse:

    Opa…

    Parabens pelo site.

    Certamente vai ajudar muita gente q ta comecando e tb os q nao sao muitos estudiosos (como eu) hehe

    abcs,

    Diogo Lopes

    Utilizando Mozilla Firefox Mozilla Firefox 2.0.0.11 no Windows Windows Server 2003
  4.  
    Xorna disse:

    ahhh… acabei de usar essa megarotina =)

    Utilizando Mozilla Firefox Mozilla Firefox 2.0.0.11 no Windows Windows XP
  5.  
    Prinity disse:

    amigo!! mas vc tá chique ein?!

    fui procurar isso no google e qual site que apareceu? phpit!

    saudações candangas!

    Utilizando Mozilla Firefox Mozilla Firefox 2.0.0.11 no Windows Windows 2000
  6.  
    Luiz F. G. Deitos disse:

    Olá…

    Conheço seu site atravéz d um camarada meu, o Carlos (souweb.info)…

    gostei muito do artigo,

    porém gostaria de fazer uma pergunta,,

    ñ tenho la muita noção de segurança e tal…

    mas supomos que alguém insira o link:

    ou então

    se esse comando funcionar como "teoricamente" funcionaria, ñ comprometeria a segurança do site?

    aguardo resposta!,, um abraço

    Utilizando Mozilla Firefox Mozilla Firefox 2.0.0.12 no Windows Windows XP
  7.  
    william disse:

    amigao,

    no internet explorer NAO FUNCIONA

    coloca isso no seu artigo

    Utilizando Mozilla Firefox Mozilla Firefox 3.0.5 no Windows Windows Vista
  8.  
    Rafael Jaques disse:

    Funciona sim…

    Mas no IE5 e IE6 ele põe o nome de arquivo errado..

    Tenta o novo script! :)

    Utilizando Mozilla Firefox Mozilla Firefox 3.0.5 no Mac OS X Mac OS X 10
  9. Utilizando Mozilla Firefox Mozilla Firefox 3.0.5 no Ubuntu Linux Ubuntu Linux
  10.  
    Jason disse:

    Cara, faço as palavras do xorna as minhas! me obriguei a procurar isso agora, eonde achei :b hehehe

    vlw

    Utilizando Mozilla Firefox Mozilla Firefox 3.6.8 no Windows Windows 7
  11.  
    Rodrigo Miranda disse:

    Estava procurando uma coisa assim…

    Vou testar aqui…

    Daí eu uso quando precisar.

    Abç o/

    Utilizando Mozilla Firefox Mozilla Firefox 3.6.13 no Ubuntu Linux Ubuntu Linux
  12.  
    Fabio disse:

    legal, vou testar

    Utilizando Internet Explorer Internet Explorer 8.0 no Windows Windows XP
  13. Pingback: iT-Full

  14.  
    Gabriel disse:

    Fis e deu Certo Legal
    Se tiver + Coisas Parecidas me Passem

  15.  

    Opa amigo.. Entao essa é minha maior questão, colocar uma URL do outro Site.
    Alguem pode me Ajudar ?

  16.  
    Antonio Carlos disse:

    Parabéns,

    Muito bem escrtio. Foi copiar, colar e funcionou. Muito obrigado.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">