Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сделать маску ссылки на реальный (оригинальный) файл

5.3K
29 декабря 2007 года
Bear Deon
82 / / 20.01.2007
Пример:

есть ссылка 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 и гугл облазил, но так и не нашел ответа. А велосипед изобретать не охото.
312
29 декабря 2007 года
dead_star
392 / / 26.11.2006
я делалю так
http://www.mysite.com/download.php?down=album_id
album_id - id трека

файл download.php
Код:
// из базы по id-шнику узнаем реальный путь к файлу
// записывает его в переменную $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);
17K
29 декабря 2007 года
savostin
37 / / 12.10.2006
include mp3? ппц... а докачка поддерживается? ;-)
Цитата:
The include() statement includes and evaluates the specified file.


Тада уже fpassthru пользуйте. А докачку через парсинг заголовков и fseek...
ЗЫ. Я бы делал так. Создавал во временной директории symlink на оригинальный файл (лучше даже директорию уникального неподбираемого имени, а там внутри symlink на файл, чтобы имя файла сохранить), а затем redirect на этот урл. Ну и по таймеру убивать старые симлинки. Что дает - для скачивания можно использовать более другой легкий web-сервер, докачка, никаких скриптов для отдачи контента. А в вашем варианте уже 10-ый клиент убьет сервер...

5.3K
29 декабря 2007 года
Bear Deon
82 / / 20.01.2007
Цитата: savostin
include mp3? ппц... а докачка поддерживается? ;-)

Тада уже fpassthru пользуйте. А докачку через парсинг заголовков и fseek...
ЗЫ. Я бы делал так. Создавал во временной директории symlink на оригинальный файл (лучше даже директорию уникального неподбираемого имени, а там внутри symlink на файл, чтобы имя файла сохранить), а затем redirect на этот урл. Ну и по таймеру убивать старые симлинки. Что дает - для скачивания можно использовать более другой легкий web-сервер, докачка, никаких скриптов для отдачи контента. А в вашем варианте уже 10-ый клиент убьет сервер...



Жалко не смогу попробовать symlink. На данный момент скрипт пишется на домашней машине, по Виндой. А *nix у меня нет возможности достать. Замену symlink, пока не могу найти, но буду еще искать.

Я вот только одного не могу понять. Как понять [COLOR="DimGray"]Создавал во временной директории symlink на оригинальный файл[/COLOR] на файл. Звучит как будто создать ярлык(отдельный файл).

Был бы *nix, я бы давно уже его поставил, а то под этой Виндой много функций не работают, приходится искать аналоги.

17K
29 декабря 2007 года
savostin
37 / / 12.10.2006
symlink для винды (NTFS) как его к php прикрутить не в курсе, может через exec. я на perl пишу, сори.

Значит так.
Наши файлы реально лежат по папочкам, можно (и нужно) даже вне 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 пользуются ;-)
17K
29 декабря 2007 года
savostin
37 / / 12.10.2006
Вместо symlink можно тупо копировать файл. Правда быстро распухнет ;-)

Потом на боевом сервере просто заменишь одну строку.
5.3K
29 декабря 2007 года
Bear Deon
82 / / 20.01.2007
Цитата: savostin
Вместо symlink можно тупо копировать файл. Правда быстро распухнет ;-)

Потом на боевом сервере просто заменишь одну строку.



Я испробовал все что можно отсюда
http://www.php.net/manual/ru/function.symlink.php

Даже папку win32 засорил... Ребутнулся, запустил все повторно, не помогло )) Хотя и там народ жалуется что все что там описанное в комментах не работает.

Наверное я это дело пока отложу, до того момента пока у меня не появится *nix. А то эж как то все это гемморно под виндой.

А пока помучаюсь с созданием шаблонов.

PS. Я пишу cms для mp3-ного сайта.

5.3K
03 января 2008 года
Bear Deon
82 / / 20.01.2007
решение проблемы нашел, тему можно закрывать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог