Ir para conteúdo

Arquivado

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

Eliseu Filipi

Gerar link de download

Recommended Posts

Olá Gente!!

 

Primeiramente quero deixar claro que não intendo quase nada de PHP, JAVA, etc, mas estou tentando aprende.

 

Tenho um site de downloads com diversos arquivos e gostaria de proteger os links, gerando apos determinado tempo o link original.

 

 

Então oque eu preciso é o seguinte:

 

(1). Armazenar meus links em uma página PHP (talvez por Array), com nome, ID e link. Ex.:

(1) => Array
        (
            (id) => '46548652',
            (nome) => 'Arquivo 1',
            (link) => 'SiteExternal.com/file.exe'
        ), 

(2). Disponibilizar um link/url (inline) para usar no navegador, que redirecionasse SEMPRE para uma mesma página de download, mas que armazenasse na url uma ID diferente. Ex.: http://mysite.com/download.html?ID=46548652"

 

Então o internauta clicasse em um botão para liberar o download, aguardasse o cronometro regressivo, e gerasse um novo botão "download". Esse botão "download" quando clicado que buscasse na pagina php (na array) o ID contido na url da página, e gera-se o link original.

 

 

Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

// felipebevi.com.br 20160115

 

$id = trim($_GET['ID']); // retira possiveis espacos - pode-se adicionar (int) para que trabalhe somente com numeros

$array_ids = array(

'46548652' => array( // sugestao para usar o id desejado como chave para o array de dados para que o proprio PHP busque se o registro existe ao inves de testar 1 por 1.

'id' => '46548652',
'nome' => 'Arquivo 1',
'link' => 'SiteExternal.com/file.exe'

)

// lista com os arrays existentes (array de arrays)

);

 

if(array_key_exists($id,$array_ids)){ // se o id que voce passou existir no seu array de downloads

header('location: '.$array_ids[$id]['link']); // redireciona o cara pro link

exit();

}else{

echo "nao existem links para este ID"; // se não, exibe uma mensagem na tela

}

 

 

// de modo simples, isso funciona. Há de se melhorar questões de onde guardar os dados do array, seguranca se for necessario com htaccess, tratamentos extras, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi!

Será q um exemplo assim te ajuda?

<?php
sleep(5); //aguarda 5 sec.

session_start(); //Inicia sessão (assim caso você saia da pagina e abra ela persiste

if(@$_REQUEST['link'] == $_SESSION["mylink"]['id']){
	// Link real para o arquivo vai aqui com a função header
	 header("Location: /caminho/do/download.rar");
	die();
}

$numb_key = rand(0,100); //Gera um número de 0 ~ 100
$aLink = array(
	 'id' 	=> $numb_key
	,'nome' => 'Arquivo_1'
	,'link' => 'http://localhost' . strtok($_SERVER["REQUEST_URI"],'?') . '?link=' . $numb_key
);

//Salva na sessão
$_SESSION["mylink"] = $aLink;

echo '<a href="' . $aLink['link'] . '">Link</a>';

var_dump($_SESSION);

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

// felipebevi.com.br 20160115

 

$id = trim($_GET['ID']); // retira possiveis espacos - pode-se adicionar (int) para que trabalhe somente com numeros

$array_ids = array(

'46548652' => array( // sugestao para usar o id desejado como chave para o array de dados para que o proprio PHP busque se o registro existe ao inves de testar 1 por 1.

'id' => '46548652',

'nome' => 'Arquivo 1',

'link' => 'SiteExternal.com/file.exe'

)

// lista com os arrays existentes (array de arrays)

);

 

if(array_key_exists($id,$array_ids)){ // se o id que voce passou existir no seu array de downloads

header('location: '.$array_ids[$id]['link']); // redireciona o cara pro link

exit();

}else{

echo "nao existem links para este ID"; // se não, exibe uma mensagem na tela

}

 

 

// de modo simples, isso funciona. Há de se melhorar questões de onde guardar os dados do array, seguranca se for necessario com htaccess, tratamentos extras, etc.

 

 

Olá Felipe, muito bom parabéns,

 

DUVIDA 1. Agora gostaria de chamar a função em um botão com timer. Mas como posso pega o ID da pagina como "GET['id']" mas em html/script para adicionar a pagina. Ex.:

<input type="submit" name="Submit" value="Download" class="keygen-download-button" id="timer" t="05" onclick="window.location.href='/download.php?id=MinhaID';">

DUVIDA 2. É possível proteger o uso de /download.php, sendo valido apenas se chamar de dentro de meu site? Caso contrario pode se pegar digamos mysite.com/download.php?id=5 e colar em qualquer site.

 

DUVIDA 3. Tem como abrir o novo endereço na mesma pagina e sem mudar o link? Ou seja posso estar em qualquer site mas o endereço continuar o do meu site? Para proteger o link original.

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Oi!

 

Será q um exemplo assim te ajuda?

<?php
sleep(5); //aguarda 5 sec.

session_start(); //Inicia sessão (assim caso você saia da pagina e abra ela persiste

if(@$_REQUEST['link'] == $_SESSION["mylink"]['id']){
	// Link real para o arquivo vai aqui com a função header
	 header("Location: /caminho/do/download.rar");
	die();
}

$numb_key = rand(0,100); //Gera um número de 0 ~ 100
$aLink = array(
	 'id' 	=> $numb_key
	,'nome' => 'Arquivo_1'
	,'link' => 'http://localhost' . strtok($_SERVER["REQUEST_URI"],'?') . '?link=' . $numb_key
);

//Salva na sessão
$_SESSION["mylink"] = $aLink;

echo '<a href="' . $aLink['link'] . '">Link</a>';

var_dump($_SESSION);

 

 

Olá Gabriel,

Agradeço pelo interesse em me ajudar. Testei mas nao te funcionando. Por enquanto o do Felipe deu certo, falta uns ajustes. Mas vlw mesmo, abç.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por clovis.sardinha
      Bom dia.
      Meu problema é o seguinte:
      Estou fazendo uma tabela e preciso mostrar o usuário e várias cidades que pertencem a este usuário.
      O resultado do array é o seguinte:

      Quando passo para a tabela os valores de cidade se repetem para o mesmo usuário até o final e retorna fazendo o mesmo para o próximo usuário. 
      Veja abaixo

       
      Meu código para a tabela é a seguinte:
      <tr> <td align="left"><?php echo $usuario['nome'] ?></td> <td align="left"><?php echo $usuario['nome_orgao'] ?></td> <td align="left"><?php echo $usuario['nome_funcao'] ?></td> <?php foreach($destinos as $key=>$destino):?> <?php $key=0;?> <td align="left"> <?php foreach($destino as $chave=> &$cidade): ?> <?php echo $cidade['cid_nome']."-";?> <?php endforeach;?> </td> <?php $key+=$key; ?> <?php endforeach;?> <td><?php echo date('d/m/Y', strtotime( $usuario['created_at'])) ?></td> <td align="left"><a href="<?php echo base_url('UserAdmin/Usuario/getUsuarioById')."/".$usuario['id_user'] ?>">DETALHES</a></td> </tr> <?php endforeach ?> Onde estou errando? O que tenho de fazer para percorrer este array de modo a aparecer apenas as cidades pertencentes a cada usuário?

    • Por Giovanird
      Listo um array pelo foreach e preciso pegar os valores fora do foreach.
      Abaixo tenho o exemplo do foreach com os valores
       
      <?php foreach($turma $rsturma): if(($rsturma['id'] == 1){ echo $rsturma['nome']."<br>"; echo $rsturma['idade']."<br><br>"; } endforeach; //Dentro do foreach me retorna: Luis 13 Maria 12 Carlos 12 Matheus 14 Andréa 12 //Preciso pegar a posição e o valor desta lista $posicao1 = 1; $nome1 = Luis; $posicao2 = 2; $nome2 = Maria; $posicao3 = 3; $nome3 = Carlos; $posicao4 = 4; $nome4 = Matheus; $posicao5 = 5; $nome5 = Andréa;  
×

Informação importante

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