Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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);>
<?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.
>
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ç.
<?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(
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{
// 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.