Как сделать маску ссылки на реальный (оригинальный) файл
есть ссылка http://www.mysite.com/?do=download&action=view&id=443&music_id=1836&artists_id=781&down=album_id
которая в итоге введет к загрузке файла http://www.mysite.com/music/artist/f/Faithless/Faithless-WeComeOne.mp3
При скачивание файла, отображается его реальный путь. Как сделать так чтобы этот реальный путь заменялся чем либо другим.
И при вводе адреса подобного этому http://www.mysite.com/music/artist/f/Faithless/Faithless-WeComeOne.mp3, пользователь перенаправлялся на оприделённую страницу.
Возможно ли это все воплотить с помощью mode_rewrite ?
Весь codenet и гугл облазил, но так и не нашел ответа. А велосипед изобретать не охото.
http://www.mysite.com/download.php?down=album_id
album_id - id трека
файл download.php
// записывает его в переменную $filename
// а дальше
$content = file_get_contents($filename);
$file = $_SERVER['DOCUMENT_ROOT'] . "download.mp3";
$fp = fopen($file, "w");
fwrite($fp, $content);
fclose($fp);
header('Content-type: ' . $mime); // соответствующий мимик
header('Content-Disposition: attachment; filename="download.mp3"');
// прикрепление на выбор - readfile() или include()
//readfile($file);
include($file);
Тада уже fpassthru пользуйте. А докачку через парсинг заголовков и fseek...
ЗЫ. Я бы делал так. Создавал во временной директории symlink на оригинальный файл (лучше даже директорию уникального неподбираемого имени, а там внутри symlink на файл, чтобы имя файла сохранить), а затем redirect на этот урл. Ну и по таймеру убивать старые симлинки. Что дает - для скачивания можно использовать более другой легкий web-сервер, докачка, никаких скриптов для отдачи контента. А в вашем варианте уже 10-ый клиент убьет сервер...
Тада уже fpassthru пользуйте. А докачку через парсинг заголовков и fseek...
ЗЫ. Я бы делал так. Создавал во временной директории symlink на оригинальный файл (лучше даже директорию уникального неподбираемого имени, а там внутри symlink на файл, чтобы имя файла сохранить), а затем redirect на этот урл. Ну и по таймеру убивать старые симлинки. Что дает - для скачивания можно использовать более другой легкий web-сервер, докачка, никаких скриптов для отдачи контента. А в вашем варианте уже 10-ый клиент убьет сервер...
Жалко не смогу попробовать symlink. На данный момент скрипт пишется на домашней машине, по Виндой. А *nix у меня нет возможности достать. Замену symlink, пока не могу найти, но буду еще искать.
Я вот только одного не могу понять. Как понять [COLOR="DimGray"]Создавал во временной директории symlink на оригинальный файл[/COLOR] на файл. Звучит как будто создать ярлык(отдельный файл).
Был бы *nix, я бы давно уже его поставил, а то под этой Виндой много функций не работают, приходится искать аналоги.
Значит так.
Наши файлы реально лежат по папочкам, можно (и нужно) даже вне DOCUMENT_ROOT.
Создаем папку DOCUMENT_ROOT/download/{key}/ где {key} - уникальный "рандомный" ключ, выданый данному пользователю. Для ограничения количества скачек можно его генерировать один раз для одного пользователя (если они у нас авторизованые, ну или для посетителя, если нет). Суть не в этом. В этой папке создаем симлинк на файл, который пользователь запросил (music.mp3) и отдаем ему урл /download/{key}/music.mp3
Затем через какое-то (установленное и известное пользователю) время симлинк убиваем. Т.е. пользователь получил прямую ссылку, может использовать любой менеджер закачек, но отдавать такую ссылку не выгодно - она умрет скоро.
Если уж совсем приспичит, можно давать доступ в эту папку только при наличии куки, или что еще более извращенно, ставить куку key={key} пользователю отдавать URL /download/music.mp3, а mod_rewrite'ом вставлять {key} внутрь URL'a, чтоб пользователь "не видел" {key}. Но тогда не все менеджеры закачек будут поддерживаться, а только те, которые могут тащить куки из браузера, да и не все IE пользуются ;-)
Потом на боевом сервере просто заменишь одну строку.
Потом на боевом сервере просто заменишь одну строку.
Я испробовал все что можно отсюда
http://www.php.net/manual/ru/function.symlink.php
Даже папку win32 засорил... Ребутнулся, запустил все повторно, не помогло )) Хотя и там народ жалуется что все что там описанное в комментах не работает.
Наверное я это дело пока отложу, до того момента пока у меня не появится *nix. А то эж как то все это гемморно под виндой.
А пока помучаюсь с созданием шаблонов.
PS. Я пишу cms для mp3-ного сайта.