Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Akwen

Como forçar download de um arquivo?

Recommended Posts

Pessoal, tava usando o código abaixo para forçar download... peguei em algum lugar aqui no forum mesmo... deixei os creditos nele. Só que fica muito vulneravel, ja q os dados sao passados pela url... eu pensei em criptografar, mas... sei lá, ainda assim fica vulneravel.

 

Alguém ai tem alguma ideia para melhorar esse código, ou tem algum outro codigo pra me passar? oq eu quero e vamus supor.. um arquivo pdf, ele abrir a janela de download, e nao tentar abrir no navegador....

 

Segue:

 

<?php##############################################################################################################Autor: Leandro Maniezo - Sistema de download de arquivo  --- Data: 04/01/2006 - webmaster@maniezo.com.br   ##Para usar basta usar um link por exemplo  <a href="arquivo.php?arquivo=bola.jpe&nome=img_bola">Download</a>##Note que ao criar o link passei dois parametros que são "arquivo" e "nome" arquivo é o no do arquivo no meu##exemplo "bola.jpg". Ja o paramento nome é o novo nome do arquivo que vai ser gravado na  maquina  da pessoa##que estiver fazendo o download, no meu exemplo fico img_bola.jpg, não  precisa passar  a  extensão ele cria##sozinho.																									#	#																											#					#Não se esqueça que no meu exemplo eu considerei  que a imagem bola.jpg  estava  no  mesmo  diretorio  que o# #arquivo.php se as imagens tiver em outro diretorio tera que passar as pastas e niveis juntos.				##############################################################################################################function download(){$tamanho = filesize("$arquivo"); // pega o tamanho do arquivo em bytes$ext = explode (".",$arquivo);// enviar os cabeçalhos HTTP para o browserheader("Content-Type: application/save"); header("Content-Length: $tamanho");header("Content-Disposition: attachment; filename=$nome.$ext[1]"); header("Content-Transfer-Encoding: binary");// abrir e enviar o arquivo$fp = fopen("$arquivo", "r"); fpassthru($fp); fclose($fp);}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer usando banco de dados, cadastando o nome do arquivo e o diretorio onde ele se encontra

 

downloadFile.php

<?require "conexao.php";$fileID = $_GET['fileID'];if($fileID != ""){require("conexao.php");$sql = "SELECT * FROM arquivos WHERE id = '$fileID'";$resultado = mysql_query($sql)or die ("Não foi possível listar os cadastros:: ".mysql_error());$total = mysql_num_rows($resultado);$cont = 1;	while ($linha=mysql_fetch_array($resultado))	{		$arquivo = utf8_encode($linha["arquivo"]);		$dir = utf8_encode($linha["dir"]);			$file = "arquivos/".$dir."/".$arquivo;	}	header("Content-type: application/save");	header('Content-Disposition: attachment; filename="' . basename($file) . '"');	header('Expires: 0');	header('Pragma: no-cache');	readfile("$file");		exit();	echo "<script language='javascript'> window.close(); </script>";}else{	die("Erro ao tentar baixar o arquivo. Tente novamente!");}?>

E para exibir o link pra download basta listar do banco de dados

Link: downloadFile.php?fileID=$id

 

 

E da proxima vez tente não da UP no seu post, alem de ser chato, você pode ser penalizado caso algum moderador do forum veja e não goste disso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tinha pensado nessa lógica de criar um recordset antes...Bom, código funcionou em partes. Quando eu clico no link, ou acesso a página diretamente passando as variaveis, o arquivo abre no navegador... ao invés de fazer o download. Fiz alguns testes usando o código q eu havia postado, e isso ocorre quando há conexão ao banco....No seu código, coloquei ob_start(); no inicio dele e ob_end_flush(); no final. Agora, quando clico no link, funciona.... Mas quando tento acessar direto, passando as variaveis... ele da o erro(abre no navegador). Meu medo é que.... a pessoa por algum motivo, tente fazer isso e dê esse erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta ok mais i se eu for ao seu site e mudar alguns caracteres dessa linha?

 

www.site.com.br/downloads/downloadFile.php?file=../index.php

 

ou

 

www.site.com.br/downloads/downloadFile.php?file=../wp-settings.php

 

e obtenho apartir disso seu login e senha do banco de dados!

 

Estou disendo isso porque usei o mesmo sistema listado acima e quase perdi meu site todo!

ainda bem que vi este tópico.

 

http://forum.wmonline.com.br/topic/169672-forcando-o-download-com-estes-scripts/

 

desculpe se estou falando bobagem mais usei algo como escrito acima e um cara que eu nem conhecia! dono do tópico acima foi ao meu site, entro em contato comigo via email e me explico como funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.