Ir para conteúdo
Fórum Script Brasil
  • 0

Download com Senha


Thiago Luna

Pergunta

Olá, pessoal.

Estou criando um site que hospede arquivos de clientes, onde esses arquivos serão oferecidos para downloads. Até ai bem tranquilo.

Mas o cliente quer distribuir senhas de acesso para estes arquivos.

Por exemplo:

Um professor hospeda em meu site sua apostila:apostila.zip. Agora ele vai oferecê-la para 10 alunos.

Cada Aluno terá sua senha. Até aqui continua tranquilo. Crio 10 usuarios com suas senhas e coloco no banco.

Crio uma página de acesso a esse download com usuario e senha.

A questão difícil é a seguinte. Não permitir que este aluno baixe mais de 1 vez este mesmo arquivo e não permitir que ele use esta senha mais de uma vez, evitando que ele a repasse para outros alunos.

Existe alguma função em PHP que me retorne se o download foi concluído? A idéia é pegar esse retorno e mudar uma flag no banco para Baixado, desativando a senha usada.

Posso fazer isso na hora em que o botão de download é clicado, mas preciso ter certeza de que o mesmo foi realizado com sucesso para poder desabilitar a senha.

Alguém pode me dar uma luz? Essa função de retorno de download existe?

Há braços.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Cheguei até aqui:

<?php
include"includes/conexao.php";
$senha=$_POST["senha"];
$logar = mysql_query("SELECT * FROM filme WHERE senha='$senha'") or die("erro ao selecionar");
if (mysql_num_rows($logar)>0 ){
    $sql=mysql_query("SELECT ativo FROM filme WHERE senha='$senha'");
    $result=mysql_fetch_assoc($sql);
    if($result['ativo'] == 1 ){
        echo"<script>alert('Esta senha já foi utilizada!')</script>";
        echo"<script>history.go(-1)</script>";
        mysql_close();
    } else{
        // aqui iniciamos o download do arquivo....
        // apos o download terminar
        $file = $_GET['imagem']; // pega o endereço do arquivo
        header("Content-Type: application/save");
        header("Content-Length:".filesize($file));
        header('Content-Disposition: attachment; filename="' . $file . '"');
        header("Content-Transfer-Encoding: binary");
        header('Expires: 0');
        header('Pragma: no-cache');
        // nesse momento ele le o arquivo e envia
        $fp = fopen("$file", "r");
        fpassthru($fp);
        fclose($fp);
        mysql_query("UPDATE filme SET ativo=1 WHERE senha='$senha'");
    }
} else {
    echo '<p align="center">Senha não confere< /br> <a href="java script:history.back(1);">Tente Novamente</a></p>';
}
?>

Funciona bem, porém, o problema continua. Se o usuário clicar em cancelar, não baixando o arquivo, mesmo assim a linha do update é executada ou se a conexão cair, essa linha também é executada e quando se tentar baixar novamente o arquivo aparece a mensagem de senha já utilizada.

Preciso de algum controle para saber se o download chegou realmente ao fim.

SOCORRO!!!!

Link para o comentário
Compartilhar em outros sites

  • 0

http://www.edgarserra.com/13/limitando-a-v...vos-com-php.jsp

Nesse script é feito o limite da velocidade do download, mas a parte que te interessa é que ai você tem como saber quando a totalidade do arquivo já foi transferida, não é 100% confiável, mas já te dá um caminho.

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw ESerra, pela orientação. Vou seguir este caminho agora.

Coloquei um exemplo na net pra vocês poderem ter uma ideia melhor do que está acontecendo:

http://locaphp.awardspace.info/public/lista.php

vocês podem cadastrar um filme e colocar uma imagem pequena (100, 200 kb) para upar.

Depois tentem baixar a imagem digitando a senha e clicando em baixar.

A senha é o titulo do filme que vocês cadastraram.

Notem que depois que baixarem não conseguirão baixar novamente pois a senha já foi usada. PERFEITO!!!

Porém, se por algum motivo, na hora de baixar, a pessoa clicar sem querer em cancelar, e tentar denovo, já era!

Preciso acertar isso. Só atualizar o campo ativo se o download for completado.

Há braços.

Link para o comentário
Compartilhar em outros sites

  • 0
Pode marcar como resolvido? Ou ainda prefere que deixe assim, case surge mais duvidas?

Amigão, ainda não está resolvido.

Notem que depois que baixarem não conseguirão baixar novamente pois a senha já foi usada. Até ai PERFEITO!!!

Porém, se por algum motivo, na hora de baixar, a pessoa clicar sem querer em cancelar, e tentar denovo, já era! Não deixa tentar novamente. ERRADO!!!

Preciso acertar isso. Só atualizar o campo ativo se o download for completado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...