Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Linux: cоздание временных URL до файлов (http)(как реализовать) / 9 сообщений из 9, страница 1 из 1
30.10.2007, 06:51:14
    #34903424
n00kl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
На различных сайтах видел такую фишку: создание временного уникального урл к файлу на загрузку (каждому пользователю/файлу свой), например: http://_домен_/download/46a2b7b6ceda6e7f6728b47d1b4d179a/4726a832/file.rar (подобные вещи видел и с ftp)
Меня интересует как чем/как это реализовывают - созданием симликов или модуль какой-то хитрый для lighttpd\cheerokie\nginx\apache o_O?
вообщем, кто-нибудь подобные вещи реализовывал? буду признателен за подсказку...

ЗЫ: раздача через php-скрипт не пойдёт, ибо слишком ресурсоёмко
...
Рейтинг: 0 / 0
30.10.2007, 12:01:34
    #34904121
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
с помощью mod_rewrite apache можно преобразовать урл. Например, сделать преобразование такое, что при обращении к урлу http://_domain_/parm1/parm2/file.rar на сервере запрашивался урл http://_domain_/cgi-bin/getfile?key=parm1&file_id=parm2.
...
Рейтинг: 0 / 0
30.10.2007, 14:18:19
    #34904736
n00kl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
я забыл уточнить, что юзер _не должен_ получить реальный путь к файлу.

с помощью mod_rewrite я не понимаю, как это реализовать, вот мой ход мысли

юзер запрашивает: http://_домен_/download/46a2b7b6ceda6e7f6728b47d1b4d179a/file.rar,
преобразовываем, скажем в http://_домен_/download.php?uid=46a2b7b6ceda6e7f6728b47d1b4d179a.
в download.php проверяем корректность uid, а что дальше?
если использовать Header("Location: http://....") это выдаст реальное расположения файла
если открыть файл выдать "поток" сразу браузер (с соответствующими заголовками, конечно) - это неприемлемо, сервер не справится с такой нагрузкой, ибо популярная файлопомойка

я в чем-то не прав?
...
Рейтинг: 0 / 0
30.10.2007, 14:36:56
    #34904796
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
так же в download.php из внутренней базы берём путь к файлу, соответствующий данному uid. Запись о соответствии uid и пути к файлу во внутренней базе появляется на этапе выдачи уникального линка пользователю. После скачки, запись из БД удаляется.
...
Рейтинг: 0 / 0
30.10.2007, 21:35:43
    #34905937
n00kl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
это-то понятно, вопрос не в этом
...
Рейтинг: 0 / 0
07.11.2007, 11:47:13
    #34921325
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
Тогда я не совсем понимаю в чём проблема? И почему поток с файлом нельзя сразу отдать? Чем sendfile() хуже user-space ftp-сервера? С чего вы взяли, что создание символической ссылки + выдача потом user-space демоном, да и использование любого юзер-спэйс механизма, будет быстрее чем вызов open() + sendfile()? Я думаю будет как раз наоборот и разница будет в разы.
...
Рейтинг: 0 / 0
13.11.2007, 19:27:01
    #34936599
n00kl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
т.е. вы предлагаете написать php-скрипт и заставить его работать на nginx (или другом подобном веб-сервере)? ибо апач от раздачи файлов пухнет неимоверно (скоко памяти есть, столько и съест)
...
Рейтинг: 0 / 0
13.11.2007, 22:18:34
    #34936790
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
Если вы спрашиваете как бы это сделал я. Я бы написал цги-скрипт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
main(char** argv, int argc){

  if(int session_id = get_session_id(argv)){
    if(char* path = fetch_path_from_db(session_id)){
      if(int fd = open(path, "r") <  0 ){
        perror(path);
        return - 1 
      }
      send_meta_data_headers();
      if(sendfile( 0 , fd, NULL, file_size(fd)) <  0 ){
        perror("on sendfile");
        close(fd);
        return - 2 ;
      }
      close(fd);
      return  0 ;
    }
    print_error("couldn't get path to file from db");
    return - 3 ;
  }
  print_error("wrong session id");
  return - 4 ;
}
open(), sendfile() и close() -- интерфейсы к системным вызовам, в мане они подробно описаны. Есть ли аналогичные интерфейсы в пхп? Я думаю что есть. Пробуйте, ищите, выже програмист. Названия других функций, помоему, достаточно информативные, что бы понять что они должны делать. perror() тоже функция из стандартной библиотеки.

PS что бы апач не съедал много памяти, поробуйте подчищать перед окончанием выполнения программы динамически выделенные буферы, даже если они создаются неявно чезер new()/malloc(), так как апач при обслуживании запросов не убивает рабочий процесс, а принимает на обработку следующий запрос, таким образом накапливая утечку памяти от запроса к запросу. Через сколько запросов апач перезапускает рабочий процесс указывается в его конфигурационном файле.

PS2 что бы уже совсем быть уверенным: вопрос тут не в языке програмирования или технологии или идее, вопрос в вызове функции sendfile(), не поленитесь и прочитайте ман по ней, так как от ОС к ОС технические подробности реализации этой функции могут меняться, но главное остается.
...
Рейтинг: 0 / 0
17.11.2007, 19:12:44
    #34946964
n00kl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linux: cоздание временных URL до файлов (http)(как реализовать)
спасибо, буду пробовать
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Linux: cоздание временных URL до файлов (http)(как реализовать) / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]