За последние 24 часа нас посетили 24219 программистов и 1715 роботов. Сейчас ищут 2006 программистов ...

временная ссылка

Тема в разделе "PHP для новичков", создана пользователем agent669212, 22 окт 2010.

  1. agent669212

    agent669212 Активный пользователь

    С нами с:
    15 дек 2009
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Новосибирск
    Скажите как можно сделать временную ссылку на файл, которая будет меняться при каждом нажатии на ссылку скачать
     
  2. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    хранить в базе путь к файлу, например
    file_id int,
    file_path varchar

    , сделать табличку для временных ссылок, например:
    link_id int,
    expire date,
    file_id int

    при генерации ссылки на файл, вставляем запись во вторую таблицу и формируем ссылку вида
    mysite/download.php?link_id=123

    скрипт download.php берет присланный ему link_id, лезет во вторую таблицу, смотрит, что там действительно есть такая запись, и что она не expire, далее лезет в первую таблицу по file_id, берет от туда путь, читает файл с диска и пишет в респонс. при успешной отдаче удаляет запись из второй таблицы по link_id
    это упрощенно.
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Можно построить какой-либо алгоритм, к примеру.
    Есть у нас имя файла, мы передаёт его ASCII, но при этом в начальных байтах указываем порядок, в котором читать.
    Так же можно сделать метки на случаи дифтонгов в словах (tOUch, cOUch), представить в реверсии суффиксы, аффиксы и делать разбор.
     
  4. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    даж я не асилил твой пост :( имя файла в ASCII будет же статичным.
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Будет =)
    Но количество возможных комбинаций имени файла зависит от его длины, а начальные байты могут указывать на количество и порядок этих байт. Т.е можно залить бесполезными и указать его в качестве начальной метки.
    Этот вариант чисто теоретический, на практике он никому нахер не нужен =)
     
  6. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    сразу так сказал бы, а то я зря включал моск для осваивания новой информации))
     
  7. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    как вы при таком подходе предлагаете ограничить действие ссылки, чтоб ей можно было воспользоваться один только раз?
     
  8. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    каждый раз генерировать уникальный ключ и заносить в базу.
    как только произошёл доступ по данному ключу - блокировать его или вообще удалить из базы.
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Такой задачи автор темы не ставил.
     
  10. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    но я думаю, что подразумевал))
     
  11. agent669212

    agent669212 Активный пользователь

    С нами с:
    15 дек 2009
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Новосибирск
    engager
    А в какой именно респонс
     
  12. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    response - ответ сервера. в нашем случае, то, что генерит пхп-скрипт.
    например так:

    PHP:
    1. header('Content-Type: application/octet-stream');
    2. $content = file_get_contents('c:/php/php.ini');
    3. echo($content);
     
  13. agent669212

    agent669212 Активный пользователь

    С нами с:
    15 дек 2009
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Новосибирск
    А вот к примеру человек перешел по ссылке test.ru/a1/FJhghGHvb
    как мне узнать a1 и FJhghGHvb
    Надо использовать HTTP_REFERER а дальше как разбить ссылку на части
     
  14. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    эм
    если у меня ссылка вида test.ru/a1/FJhghGHvb , то лично у меня она сделана через .htaccess
    в оригинале тип такого test.ru/?a=1&dl=FJhghGHvb
    детали не важны
    и в скрипте при .htaccess по ссылке test.ru/a1/FJhghGHvb получаю $_GET['a'] и $_GET['dl'] ну и как обрабатывать полученное надеюсь знаете
     
  15. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    товарища понесло. ты отклоняешься от курса. определись сначала, что тебе нужно, сформулируй четко задачу.
    правильно поставленный вопрос составляет половину решения.
     
  16. agent669212

    agent669212 Активный пользователь

    С нами с:
    15 дек 2009
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Новосибирск
    Надо сделать чтобы файл скачивался по временной ссылке
     
  17. agent669212

    agent669212 Активный пользователь

    С нами с:
    15 дек 2009
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Новосибирск
    И почему это header не работает:
    Код (Text):
    1.  
    2.   $url="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    3.   include('bd.php');
    4.   $sql="SELECT file_id FROM pages WHERE link='$url'";
    5.   $res=mysql_query($sql);
    6.   $res=mysql_result($res,0);
    7.   $sql1="SELECT link FROM files WHERE id='$res'";
    8.   $res1=mysql_query($sql1);
    9.   $res1=mysql_result($res1, 0);
    10.   header("Content-Type: application/octet-stream'");
    11.   header('Content-Disposition: attachment; filename="earth.jpg"');
     
  18. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    попробуй в начале скрипта
    ob_start();
     
  19. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    header("Content-Type: application/octet-stream'");
    Где открывающая одинарная кавычка?

    header('Content-Disposition: attachment; filename="earth.jpg"');

    Двойные в одинарных работать не будут, только одинарные внутри двойных

    agent669212
    Скачай себе Нетбинс например.

    Хотя, если ты оставишь веб-программирование в покое, всем станет легче
     
  20. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    o_O
     
  21. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Не, я может и туплю, бывает зачастую))
    подскажи тогда, в каком случае Parse Error: Encapsed and Whitespace возникает?

    Ps. Наверное путаю с echo "$var['blabla']"
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    Примени три магических камня:
    - редирект
    - символические ссылки
    - чистильщик по cron или по 1/N запросу (как gc для сессий)

    Файлы лежат в закрытой для прямого чтения папке. Скрипт download после проверки прав создает симлинк со случайным именем в открытой папке и сразу делает на него редирект. Время от времени надо удалять симлинки с возрастом старше, скажем, 24 часа.
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    p.s. чтобы файл отдавался с "правильным" именем и при этом избегать не-ascii имен на диске, можно применить хак через mod_rewrite: отдавать ссылку в виде
    mysite.com/jdKshkHkuwkJhdsk/хуйнанэ.jpg
    которая фактически соответствует симлинку
    mysite.com/download/jdKshkHkuwkJhdsk.link
    которая реально смотрит на файл
    /out/of/document/root/file/storage/e4f08712ab.dat
     
  24. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    Offtopic: О! здесь работает "цензура"? А где можно посмотреть как она работает? Я очень сильно интересуюсь!

    хнанэ -> фиг
     
  25. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    tommyangelo
    Сформулируй вопрос =)