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

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

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

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

я в чем-то не прав?
...
Рейтинг: 0 / 0
Linux: cоздание временных URL до файлов (http)(как реализовать)
    #34904796
RAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так же в download.php из внутренней базы берём путь к файлу, соответствующий данному uid. Запись о соответствии uid и пути к файлу во внутренней базе появляется на этапе выдачи уникального линка пользователю. После скачки, запись из БД удаляется.
...
Рейтинг: 0 / 0
Linux: cоздание временных URL до файлов (http)(как реализовать)
    #34905937
n00kl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это-то понятно, вопрос не в этом
...
Рейтинг: 0 / 0
Linux: cоздание временных URL до файлов (http)(как реализовать)
    #34921325
RAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда я не совсем понимаю в чём проблема? И почему поток с файлом нельзя сразу отдать? Чем sendfile() хуже user-space ftp-сервера? С чего вы взяли, что создание символической ссылки + выдача потом user-space демоном, да и использование любого юзер-спэйс механизма, будет быстрее чем вызов open() + sendfile()? Я думаю будет как раз наоборот и разница будет в разы.
...
Рейтинг: 0 / 0
Linux: cоздание временных URL до файлов (http)(как реализовать)
    #34936599
n00kl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. вы предлагаете написать php-скрипт и заставить его работать на nginx (или другом подобном веб-сервере)? ибо апач от раздачи файлов пухнет неимоверно (скоко памяти есть, столько и съест)
...
Рейтинг: 0 / 0
Linux: cоздание временных URL до файлов (http)(как реализовать)
    #34936790
RAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы спрашиваете как бы это сделал я. Я бы написал цги-скрипт:
Код: 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
Linux: cоздание временных URL до файлов (http)(как реализовать)
    #34946964
n00kl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, буду пробовать
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Linux: cоздание временных URL до файлов (http)(как реализовать)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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