Forum Webscript.Ru
Программирование => PHP => Тема начата: -DieseLok- от 16 Сентября 2004, 08:04:49
-
Добрый день! О великие!
У меня такая ситуация...
Есть база файлов лежат они к примеру в папке Х
Задача...
Чтобы при определённом запросе пхп брал создавал одноразовую/временную ссылку и копирывал в неё файл совпадающий запросу. а после того как пипл скачал файл она удалялась...
Зарание огромное спасибо!
-
Файли никуда копировать не надо, они как лежали где-то так пусть и лежат, это задача файла отвечающего за скачивание подставить вместо ссылки файл. Как передать файл на скачивание обсуждалось много раз, с временными ссылками тоже ничего сложного:
- генерируеш ссылку с уникальным ID, скажем так:
download.php?id=[подставляем ID]
или можно красивее:
download/подставляем ID/hardcore.zip
- ID пишем в базу, как только ползователь нажмет на ссылку download.php выдаст ему нужный файл и вытрет соответствующую запись из базы
- если download.php получает запрос с несуществующим ID - вежливо посылаем пользователя куда-нибудь...
-
Daiz13
Я думаю, ты просто не понял вопроса...
Вопрс сотоит в том, что бы не показывать реальное расположение файла, для скачки...
Чтобы при определённом запросе пхп брал создавал одноразовую/временную ссылку и копирывал в неё файл совпадающий запросу. а после того как пипл скачал файл она удалялась...
Скрипту вообще все-равно, скачал "пипл" файл или не скачал, он просто перепишет файл куда надо, отдаст ссылку пользователю и закончит свою работу, он не будет ждать пока пользователь отправит ему ответ о скачке, или не скачке файла, потому, что пользователь ничего не скажет...
http://phpfaq.ru/na_tanke#start
А тема действительно не раз поднималась... В части передачи скриптом не ссылки, а конкретно файла. Поиск по сайту рулит...
-
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/ и выдает нужный файл.
-
Вот здесь (http://forall.ru-board.com/webarchive/ndl-0.5.zip) неплохой (как мне кажется) класс, написанный как раз для этого дела.
-
Всем спасибо!!!
Попробую что нибудь придумать....
-
У меня ещу просьба дайтк пожалуйста запрос по которому искать в поиске... ато
одноразовая ссылка и временная ссылка ничего не даёт :(