Forum Webscript.Ru

Программирование => PHP => Тема начата: -DieseLok- от 16 Сентября 2004, 08:04:49

Название: Генерация одноразовой ссылки...
Отправлено: -DieseLok- от 16 Сентября 2004, 08:04:49
Добрый день! О великие!

У меня такая ситуация...

Есть база файлов лежат они к примеру в папке Х

Задача...

Чтобы при определённом запросе пхп брал создавал одноразовую/временную ссылку и копирывал в неё файл совпадающий запросу. а после того как пипл скачал файл она удалялась...


Зарание огромное спасибо!
Название: Генерация одноразовой ссылки...
Отправлено: Daiz13 от 16 Сентября 2004, 11:53:40
Файли никуда копировать не надо, они как лежали где-то так пусть и лежат, это задача файла отвечающего за скачивание подставить вместо ссылки файл. Как передать файл на скачивание обсуждалось много раз, с временными ссылками тоже ничего сложного:
 - генерируеш ссылку с уникальным ID, скажем так:
download.php?id=[подставляем ID]
 или можно красивее:
download/подставляем ID/hardcore.zip

- ID пишем в базу, как только ползователь нажмет на ссылку download.php  выдаст ему нужный файл и вытрет соответствующую запись из базы

- если download.php получает запрос с несуществующим ID - вежливо посылаем пользователя куда-нибудь...
Название: Генерация одноразовой ссылки...
Отправлено: Phoinix от 16 Сентября 2004, 14:35:44
Daiz13
Я думаю, ты просто не понял вопроса...
Вопрс сотоит в том, что бы не показывать реальное расположение файла, для скачки...

Цитировать
Чтобы при определённом запросе пхп брал создавал одноразовую/временную ссылку и копирывал в неё файл совпадающий запросу. а после того как пипл скачал файл она удалялась...


Скрипту вообще все-равно, скачал "пипл" файл или не скачал, он просто перепишет файл куда надо, отдаст ссылку пользователю и закончит свою работу, он не будет ждать пока пользователь отправит ему ответ о скачке, или не скачке файла, потому, что пользователь ничего не скажет...

http://phpfaq.ru/na_tanke#start

А тема действительно не раз поднималась... В части передачи скриптом не ссылки, а конкретно файла. Поиск по сайту рулит...
Название: Генерация одноразовой ссылки...
Отправлено: Daiz13 от 16 Сентября 2004, 19:17:40
Phoinix
Скорее ты не понял ответа, неужели я так запутано все написал?

Цитировать
Phoinix:
Вопрс сотоит в том, что бы не показывать реальное расположение файла, для скачки...

я же и говорю, пользователю мы даем не ссылку на сам файл, а ссылку на пхп-файл, отвечающий за скачивание. Реальное расположение файла нигде не светится. Я делал похожую фигню, и файлы у меня вообще лежат в невидимой из веба директории.


Цитировать
Phoinix:
Скрипту вообще все-равно, скачал "пипл" файл или не скачал, он просто перепишет файл куда надо, отдаст ссылку пользователю

это что за глупости? зачем копировать файлы?  Скрипт отдает не ссылку на файл, а контент файла.

чтобы не начинать тут флейм, специально для тех кто в танке, приведу готовый код:


 $url = trim(preg_replace("/\\.+/","",$_SERVER[\'REQUEST_URI\']));
 if ($url[strlen($url)-1]<>\'/\') {
     $url .= \'/\';
 }
 $downloads_path = \'/home/sitename/files/\';
 preg_match ( \'/download\\/(\\w{1,20})\\//isU\', $url , $matches);
 $file = $matches[1];
 $filename = find_file($file, $downloads_path);
 if ($filename === false) {
     header("location: /error/404/");
 }
 header("Content-Type: application/force-download\\r\\n");
 header("Content-Transfer-Encoding: binary\\r\\n");
 header("Content-Length: ".filesize($downloads_path.$filename));
 header("Content-Disposition: attachment; filename=".$filename."\\r\\n");
 readfile($downloads_path.$filename);

    function find_file($file, $dir) {
        $dp=opendir($dir);
        if (!$dp) {
            trigger_error("Error opening directory for reading", E_USER_ERROR);
        }
        $patern = \'/(\'.$file.\'\\-\\d{4}\\-\\d{2}\\-\\d{2}\\.zip)/isU\';
        while (!(($de=readdir($dp))===FALSE))
        {
            if (preg_match ( $patern, $de , $matches))
            {
                return $matches[1];
            }
        }
        return false;
    }



$downloads_path = \'/home/sitename/files/\';  - тут лежат файлы, имя файл состоит из названия и даты, например hardcore_20040916.zip, скрипт получает ссылку /download/hardcore/  и выдает нужный файл.
Название: Генерация одноразовой ссылки...
Отправлено: Lexx от 16 Сентября 2004, 20:31:52
Вот здесь (http://forall.ru-board.com/webarchive/ndl-0.5.zip) неплохой (как мне кажется) класс, написанный как раз для этого дела.
Название: Генерация одноразовой ссылки...
Отправлено: -DieseLok- от 17 Сентября 2004, 20:40:05
Всем спасибо!!!
Попробую что нибудь придумать....
Название: Генерация одноразовой ссылки...
Отправлено: -DieseLok- от 18 Сентября 2004, 10:31:18
У меня ещу просьба дайтк пожалуйста запрос по которому искать в поиске... ато

одноразовая ссылка и временная ссылка ничего не даёт :(