EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Временная ссылка на файл. как это работает?

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Временная ссылка на файл. как это работает?
Автор Сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18114 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 15:09    Заголовок сообщения: Временная ссылка на файл. как это работает? Ответить с цитатой

собственно, субж. Все файлообменники типа рапиды на 1 и тот же файл генерируют милионы различных ссылок. Неужели на миллион ссылок делается миллион копий файлов, или есть более красивый способ?

если знает кто нибудь - поделитесь плиз принципом работы таких скриптов?

Спасибо заранее Smile
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 15:41    Заголовок сообщения: Ответить с цитатой

RID файла заноситься в БД
RiD|FILEid|
RID-мнимая ссылка FileID реальная ссылка
http://_SITE_/dl.serverside?rid=999
При запросе RID отдается FileID(можно по Location с проверкой Referer)
После отдачи запись Rid удаляется.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 15:51    Заголовок сообщения: Ответить с цитатой

lazutov
но ведь у человека тогда как адрес самого файла браузер уже запишет реальную ссылку, а значит, он сможет ее распространять?..
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 16:08    Заголовок сообщения: Ответить с цитатой

(можно по Location с проверкой Referer)
а реферрером должен быть что-то типа RID, СУЩЕСТВУЮЩЕГО В БАЗЕ
Иначе отдавать 401/404 или 500
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18114 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 16:14    Заголовок сообщения: Ответить с цитатой

lazutov писал(а):
(можно по Location с проверкой Referer)
а реферрером должен быть что-то типа RID, СУЩЕСТВУЮЩЕГО В БАЗЕ
Иначе отдавать 401/404 или 500

это как? можно примерчик?
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 17:09    Заголовок сообщения: Ответить с цитатой

Цитата:
<?php
// settimelimit errorreporting и блаблабла
$filename = 'i.zip';
if (!file_exists($filename)) {
// нет такого
header ("HTTP/1.0 404 Not Found");
exit;
}

// размер файла
$fsize = filesize($filename);
// дата модификации файла для кеша
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
// смещение
$range = 0;

// открыть
$handle = @fopen($filename, "rb");
// если не удалось
if (!$handle){
// 403
header ("HTTP/1.0 403 Forbidden");
exit;
}
/*
Аналогичным образом можно отдать ошибки при отсутствии ID в DB
*/


// Если запрашивающий агент поддерживает докачку
if ($_SERVER["HTTP_RANGE"]) {
$range = $_SERVER["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
// смещаемся по файлу на нужное смещение
if ($range) fseek($handle, $range);
}

// если есть смещение
if ($range) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
}

header("Content-Disposition: attachment; filename=\"{$filename}\"");
header("Last-Modified: {$ftime}");
header("Content-Length: ".($fsize-$range));
header("Accept-Ranges: bytes");
header("Content-Range: bytes {$range}-".($fsize - 1)."/".$fsize);

//IE что б не умничало сцкуо

if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
Header('Content-Type: application/force-download');
else
Header('Content-Type: application/octet-stream');

while(!feof($handle)) {
$buf = fread($handle,512);
print($buf);
// тута можно sleep(1) и править второй аргумент fread для ограничения по скорости
}

fclose($handle);


?>

_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AlfaUngzipper
Два пингвина
Два пингвина


Зарегистрирован: 23.02.2007
Сообщения: 370
Откуда: Halle (Saale)
4 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 17:21    Заголовок сообщения: Re: Временная ссылка на файл. как это работает? Ответить с цитатой

noLove писал(а):
Неужели на миллион ссылок делается миллион копий файлов, или есть более красивый способ?

symlink
Это как ярлыки. Их может быть хоть три миллиона на один файл.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 17:26    Заголовок сообщения: Ответить с цитатой

ага. так вам прямо exec на шареде ....
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18114 Монеты

СообщениеДобавлено: Пн, 15 Сен, 2008 18:32    Заголовок сообщения: Ответить с цитатой

lazutov, спасибо! я думал о том варианте что ты привел, но не додумал его до конца...
Спасибо за пример еще раз! Smile)
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Сорокин
Интернет на завтрак
Интернет на завтрак


Зарегистрирован: 15.09.2008
Сообщения: 28
Откуда: Самара
815 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:12    Заголовок сообщения: Ответить с цитатой

что то я не понял. как мне кажеться разговор идет о временной сылке, а не о подмени реальной ссылки
_________________
Все могут попасть в рай, самое главное во время подчистить логи (с) r57
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18114 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:48    Заголовок сообщения: Ответить с цитатой

Михаил Сорокин писал(а):
что то я не понял. как мне кажеться разговор идет о временной сылке, а не о подмени реальной ссылки

Товарищ lazutov показал именно то, что мне и было нужно =))
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alek$
11 1110 1000
11 1110 1000


Зарегистрирован: 24.11.2007
Сообщения: 1136
Откуда: Новосибирск
26695 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:49    Заголовок сообщения: Ответить с цитатой

lazutov писал(а):
ага. так вам прямо exec на шареде ....

http://ru2.php.net/manual/ru/function.symlink.php
Не вижу проблемы Confused
_________________
Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET