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/ и выдает нужный файл.