[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт обратного отсчета до скачивания
bposter
Всем привет..Давно не занимался (программированием)и вот появилось время, давно хотел попробовать написать скрипт типа как на файл обменниках ждеш 30-60 секунд и тока потом получаешь ссылку на скачку какого либо файла, нужна помощь(подсказка) с чего начать(общий принцип работы такого скрипта)?

Сразу на ум конечно пришло что надо на JavaScripts скрыть ссылку и по истечению времени выдавать ссылку НО с другой стороны если JavaScripts у юзера отключен то ссылка получается сразу будет видна или на худой конец юзер может ее взять в исходном коде. Как лучше это реализовать хоть примерно?



Спустя 5 минут, 52 секунды (12.02.2012 - 18:11) wplounge написал(а):
Можно, например, функцию sleep(время в секундах) применить, а ссылку выводить в iframe

Спустя 2 минуты, 40 секунд (12.02.2012 - 18:13) Семён написал(а):
bposter
при запросе к файлу, проверять ключ в сессии, если нет, ставить значение таймера и
запускать JS отсчёт от значения к 0, по истечению +1 секунду делать запрос на получение ссылки.

Спустя 2 минуты, 23 секунды (12.02.2012 - 18:16) bposter написал(а):
Цитата (wplounge @ 12.02.2012 - 15:11)
Можно, например, функцию sleep(время в секундах) применить, а ссылку выводить в iframe

да точно можно и так в принцепи

Спустя 5 минут, 36 секунд (12.02.2012 - 18:21) bposter написал(а):
Цитата (Семён @ 12.02.2012 - 15:13)
bposter
при запросе к файлу, проверять ключ в сессии, если нет, ставить значение таймера и
запускать JS отсчёт от значения к 0, по истечению +1 секунду делать запрос на получение ссылки.

это уже сильно сложно huh.gif

Спустя 12 минут, 49 секунд (12.02.2012 - 18:34) XCross написал(а):
1. Пользователь пришел на страницу скачивания. Во время генерации этой страницы в теплицу заносишь текущее время.

2. Страница сгенерирована, таймер на 0, идет запрос к скрипту на получение файла.

3. В скрипте берешь это время, прибавляешь 60 секунд. Если текущее время меньше, чем получившееся время, то шлешь лесом, если нет - отдаешь файл, удаляешь запись из теплицы.

Спустя 5 минут, 37 секунд (12.02.2012 - 18:40) bposter написал(а):
ХМ так sleep останавливает весь php код гдебы он небыл прописан(((

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>
Тест</title>
</head>

<body>

<table
width="200" border="1" cellspacing="5" cellpadding="5">
<tr>
<th
scope="col"><?php echo "Текст Текст Текст Текст Текст Текст Текст Текст Текст Текст "; ?></th>
</tr>
<tr>
<td><?php
sleep(3); echo "<a href='#'>Ссылка на файл</a>"; ?></td>
</tr>
<tr>
<td><?php
echo "Текст Текст Текст Текст Текст Текст Текст Текст Текст Текст "; ?></td>
</tr>
</table>



</body>
</html>

А на странице нетолькож ссылка будет к примеру((

Спустя 8 минут, 12 секунд (12.02.2012 - 18:48) nugle написал(а):
bposter
можно через js
http://javascript.ru/setTimeout
после истечения времени, просто добавляешь ссылку в нужный блок

Спустя 2 минуты, 53 секунды (12.02.2012 - 18:51) XCross написал(а):
Цитата
после истечения времени, просто добавляешь ссылку в нужный блок

Это все просто обходится.

Спустя 9 минут, 16 секунд (12.02.2012 - 19:00) nugle написал(а):
XCross
ну найти то ее можно

Спустя 3 минуты, 45 секунд (12.02.2012 - 19:04) wplounge написал(а):
Цитата
так sleep останавливает весь php код гдебы он небыл прописан(((


Я ж поэтому и говорю, что в iframe ccылку выводить. Хотя, конечно, на JS было бы элегантнее.

Спустя 29 минут, 22 секунды (12.02.2012 - 19:33) bposter написал(а):
Вобщем я коечто придумал но это так сильно геморно получается конечно + базу данных нужно использовать, в базе создаю два поля одно id второе сама ссылка

Далее создаю кнопку скачать с скрытым полем и в скрытом поле указываю индефикатор(ID) нужной ссылки

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
Тест</title>
<script
type="text/javascript" src="jquery.js"></script>
</head>
<body>
<script
type="text/javascript" >

var
req = Create();

function ge(id)
{
return document.getElementById(id);
}

function Create()
{
if(navigator.appName == "Microsoft Internet Explorer")
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
req = new XMLHttpRequest();
}
return req;
}

function Request(query)
{
req.open('post', 'cod.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);
}

function Refresh()
{
var a = req.readyState;

if( a == 4 )
{
var b = req.responseText;
document.getElementById('ajax').innerHTML = b;
}
else
{
document.getElementById('ajax').innerHTML = '<center>Ждите ссылка генерируется</center>';
}
}

/////Собераем все элементы формы которые будем отправлять
function Pusk()
{
var query;
var txt = encodeURIComponent(ge('cod').value);
query = 'cod='+txt;
Request(query);
}

</script>


<div
id='ajax'></div>


<input
id="cod" name="cod" type="hidden" value="2" />

<input
type="submit" value="Скачать" onClick="Pusk()"/>






</body>
</html>


Далее идет обработчик в котором sleep делает задержку ну а потом вытягивает нужную ссылку из базы


<script type="text/javascript" src="jquery.js"></script>
<?php sleep (3);
$cod = isset($_POST['cod'])?$_POST['cod']:NULL;

$db = mysql_connect ("localhost","root","");
mysql_select_db ("url",$db);
mysql_query('SET NAMES UTF8');

$result_com = mysql_query("SELECT url FROM silka WHERE id='$cod'",$db);
$com = mysql_fetch_array($result_com);


echo $com['url'];


Но это както геморно как мне кажется ссылку надо в базу добавить потом в скрытое поле индефикатор вставить + на локалке sleep дольше чем на 30 сек не поставиш :unsure:

Спустя 8 минут, 28 секунд (12.02.2012 - 19:42) XCross написал(а):
Нафига sleep? huh.gif
Временем лучше оперируй.
Какой-нибудь ишак вздумает в цикле дергать твою ссылку.

Спустя 5 секунд (12.02.2012 - 19:42) nugle написал(а):
XCross
на depositfiles реализовано через jquery
Можно при истечении времени генерировать ключ к ссылке, а потом сравнивать. Если ключ верный, то давать скачивать, а если нет, то не давать

Спустя 2 минуты, 31 секунда (12.02.2012 - 19:44) bposter написал(а):
Цитата (XCross @ 12.02.2012 - 16:42)
Нафига sleep? huh.gif
Временем лучше пооперируй.

Ну а как например?ато я просто тока учюсь, ну например берем текущее время по серверу а дальше че сним делать не приложу ума blink.gif

Спустя 22 минуты, 47 секунд (12.02.2012 - 20:07) sergeiss написал(а):
Мне кажется, вот это самое лучшее решение, только с небольшой добавкой (и я не понял, почему в оригинале была "теплица" вместо "таблицы"? smile.gif)

Цитата (XCross @ 12.02.2012 - 19:34)
1. Пользователь пришел на страницу скачивания. Во время генерации этой страницы в таблицу заносишь текущее время.

2. Страница сгенерирована, таймер на 0, идет запрос к скрипту на получение файла.

3. В скрипте берешь это время, прибавляешь 60 секунд. Если текущее время меньше, чем получившееся время, то шлешь лесом, если нет - отдаешь файл, удаляешь запись из таблицы.

Только еще надо АЯКС добавить. По истечение нужного времени (по отстчету в JS) уходит запрос на сервер. Он сравнивает время, дошли ли уже до разрешенного порога. Если нет, то запрос просто "тупо" игнорируется. Если да - то только тогда ссылка отдается браузеру.

Тогда до истечения времени ссылки в браузере просто не будет, никто её не сможет прочитать. А если отключен JS... То это уже проблемы юзера, нефиг дурью маяться smile.gif

Спустя 9 минут, 28 секунд (12.02.2012 - 20:17) bposter написал(а):
Цитата (nugle @ 12.02.2012 - 16:42)
XCross
на depositfiles реализовано через jquery
Можно при истечении времени генерировать ключ к ссылке, а потом сравнивать. Если ключ верный, то давать скачивать, а если нет, то не давать

По поводу depositfiles у меня есть диск зверя с кучей софта так там есть браузер Опера АС так если этим браузером пользоваться то на depositfiles ссылки на скачку сразу появляются)

Спустя 1 минута, 25 секунд (12.02.2012 - 20:18) nugle написал(а):
bposter
settimeout + аякс и ноль проблем

Спустя 8 минут, 59 секунд (12.02.2012 - 20:27) XCross написал(а):
Цитата (sergeiss @ 12.02.2012 - 13:07)
и я не понял, почему в оригинале была "теплица" вместо "таблицы"? smile.gif


_____________
Вязание xe4.ru спицами.
Сайт для тестов (подопытный №543)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.