Ir para conteúdo

Arquivado

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

Daniel_Portilho

Download de arquivos a partir do banco de dados PHP

Recommended Posts

Opa!

Estou criando um GED com 2 áreas: Front (usuário) e back (admin). A partir do back-end eu seleciono um usuário e faço uploads de arquivos na área deste usuário. Até aí legal. No front estará estes arquivos que eu "uppei" para o usuário fazer downloads.

 

O problema: Criei um botão na área do usuário com href que aponta para baixar.php?caminho.., mas simplesmente não sei como fazer com que o usuário baixe esses arquivos. Já usei os seguintes métodos:

1.

header("Content-Disposition:attachment; filename='$aux['nome']'"); //download

echo "<script>window.location.href=admin.php</script>"; //retorna à página anterior

// Dá erro ao abrir o arquivo

 

2.

header("location:admin/uploads/".'$aux['nome']); //tb não funciona

header("location:admin.php); //retorna à página anterior

 

Segue o baixar.php

<?php
session_start();
include ('include/mysql_connect.php');
include ('include/checar.php');

$id = $_GET['id'];
echo "<script>alert('$id')</script>";

$sql = mysql_query("SELECT * FROM arquivo WHERE id=$id") or die (mysql_error());
$aux = mysql_fetch_array($sql);
$teste  = $aux['nome'];
if ($aux['status'] == 0) {
	mysql_query("UPDATE arquivo SET status=1 WHERE id=$id") or die (mysql_error());
	header("Content-Disposition:attachment; location:admin/uploads/".$aux['nome']);
	//header("Content-Disposition:attachment; filename='$teste'");
	//readfile('admin/uploads/'.$aux['nome']); //exibe o conteúdo do arquivo, mas não faz o DL
	exit;
}
else {
	echo readfile('admin/uploads/'.$aux['nome']);
	//header("Content-Disposition:attachment; location:admin/uploads/".$aux['nome']);
}

?>

Alguém poderia me abrir a mente?

Valeeeeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz há pouco um sistema de chamados onde os usuários inserem anexos e podemos baixar normalmente, simplesmente criando um link para o caminho do arquivo:

 

<a href='caminho_do_arquivo.txt' target='_blank'>Arquivo</a>

 

Acho que não tem muito segredo, a não ser que seja alguma extensão que o próprio navegador lê.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegue o ID do arquivo cadastrado no banco e passe para alguma página (download.php?id=ID_DO_ARQUIVO por exemplo), então nessa página vc força o download do arquivo (existem muitos scripts para isso).

 

Dicas:

Procure no google por: download arquivo php, virá varios links, escolha o que vc acha melhor, mas ao invés de pegar diretamente pelo get o nome do arquivo, pegue o ID, faça um select no banco para pegar o nome e mande baixar.

 

Porque?

Porque essas páginas de downloads muitas vezes oferecem um risco grande (RFD - Remote File Download), ou seja, baixar seus scripts PHP.

 

Ao pegar o ID, trate-o! (Vamos evitar o SQL Injection também né? rs)

Dica:

$id = (int) $_GET['id'];

Use Prepared Statments...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só completando oque o @Raul disse, nenhum arquivo/diretório pode ficar oculto, os sites que baixam vídeos do youtube por exemplo pegam a requisição HTTP que o site faz ao servidor e dá o local onde o arquivo está hospedado, uma dica é trancar os diretórios ao acesso direto. espero que ajude :)

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.