За последние 24 часа нас посетили 17705 программистов и 1709 роботов. Сейчас ищут 1566 программистов ...

Как отдать файл на загрузку

Тема в разделе "PHP для новичков", создана пользователем 440Hz, 13 дек 2007.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    эммм, вопрос непонятен.

    Суть сопоставления по таблице в том, что у тебя определенному шифру соответствует определенный путь в файловой системе, либо имя файла.

    В чем именно проблема?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Slovoblydie
    я тебе дал код, там есть ВСЕ что тебе нужно. Возьми бумажку и распиши русским языком то, что ты там у меня увидел. Хватит курить и писать... много... точиями...
     
  3. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    На мой вопрос так никто и не ответил, как ограничить количество потоков, если разрешено качать, к примеру, одновременно только два файла, чтобы выводить ошибку пользователю? завести счетчик и проверять его значение?
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Mr. T
    а в чем непонятки? все на поверхности.
     
  5. krow7

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

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    Можно ли ограничить скорость скачивания какими-либо средствами? Например, кусками как-то отдавать или еще что?
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    krow7, для начала нужно решить: можешь ли ты себе позволить долго держать соединение. если отдаешь медленно у тебя может резко подскочить количество одновременно открытых тредов вэб-сервера и их может не хватить.

    не зря ставят перед apache еще один сервер в роли прокси - чтобы апач отделался от задания быстро, невзирая на фактическую скорость передачи данных. вот если в самом nginx есть какое-то управление QoS, тогда наверное можно подумать о замедлении.
     
  7. 3ddemon3d

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

    С нами с:
    21 сен 2011
    Сообщения:
    1
    Симпатии:
    0
    Адрес:
    Нижний Новгород
    Спасибо! как раз то что искал!
     
  8. kadet

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

    С нами с:
    2 авг 2010
    Сообщения:
    79
    Симпатии:
    0
    Спасибо, 400hz, te debo una
     
  9. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    Пробую использовать код 440hz, все работает только проблема в том, последние байты очень долго загружает. Т.е. если файл 8.7 Мб, то 8.5 загружает за 30 сек, а оставшиеся 200 кб может еще 30-40 сек. В чем может быть проблема?
    Оперой фактически файл скачивается, но сама Опера указывает что файл не докачен
    Также просьба разжевать работу кода с классом, не совсем понял куда его цеплять. Там ведь имеется еще 2 функции.
    Спасибо
     
  10. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    К предыдущему посту
    У меня клик на скачивание происходит в файле index.php, в функции view_file()
    Код (Text):
    1. <form method=\"POST\" action=\"modules.php?name=".$module_name."\">
    2.             <input type=\"hidden\" name=\"lid\" value=\"".$lid."\">
    3.             <input type=\"hidden\" name=\"file\" value=\"getit\">
    4.             <input type=\"submit\" value=\""._FILES_DOWNLFILE."\">
    5.          </form>
    Где lid = id файла, getit = файл куда идет субмит getit.php и происходит отдача файла.Раньше я отдавал таким образом
    Код (Text):
    1. header("HTTP/1.1 301 Moved Permanently");
    2.     header("Location: ".$url."");
    Где $url путь к файлу+сам файл. Хочу использовать вышеприведенный скрипт. Подскажите как прикрутить
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а у тебя это дело хранится в БД?
     
  12. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    Id файла, его название хранится в БД, сам путь прописан в конфиге. Это я все вытягиваю, просто не знаю как прикрутить скрипт
     
  13. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    Если это ко мне, то также как и с application/force-download
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну ты просто под видом ссылки с именем файла даешь ссылку на скрипт и передаешь туда айдишник файла.

    соотв. вместо того что я написал вписываешь свое. путь там и все такое =)
     
  15. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    Т.е.
    Код (Text):
    1. <?php
    2. $a = new download('ПУТЬ К ФАЙЛУ КОТОРЫЙ ХОЧЕШЬ ОТДАТЬ', 'ИМЯ ПОД КОТОРЫМ ЕГО УВИДИТ ПОЛЬЗОВАТЕЛЬ', 'это тебе пока рано. Оставь как везде application/force-download', true);
    3. if ($a->download_file()) {
    4. if ($result = $db_filer->query("UPDATE `files` SET `downloads`=`downloads`+1, `date`=`date` WHERE ляляля пупупу ну ты понял это счетчик скачиваний'")) {
    5. //updated
    6. }
    Этот код вместо клика на скачивание? Этого
    Код (Text):
    1. <form method=\"POST\" action=\"modules.php?name=".$module_name."\">
    2.             <input type=\"hidden\" name=\"lid\" value=\"".$lid."\">
    3.             <input type=\"hidden\" name=\"file\" value=\"getit\">
    4.             <input type=\"submit\" value=\""._FILES_DOWNLFILE."\">
    5.          </form>
    ??? Вот именно тут у меня затык, как сформировать.
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я вобще не понимаю, что это у тебя за форма =) вобще. т.е. совсем. я на нее не буду смотреть, можно?

    делается так, запрашиваешь из бд все файлы которые доступны юзеру, делаешь на них ссылки
    <a href='download.php?id=НОМЕРФАЙЛА'>ИМЯФАЙлА</a>

    внутри там проверяешь, есть ли права скачать, и отдаешь.

    $a = new download(каталог где файлы . '/' . имя файла, 'ИМЯ ПОД КОТОРЫМ ЕГО УВИДИТ ПОЛЬЗОВАТЕЛЬ', 'application/force-download', true);
    $a->download_file();
     
  17. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    igordata Немного начинаю понимать, попробую и отпишусь.
     
  18. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    А и еще
    Код (Text):
    1. $a = new download(каталог где файлы . '/' . имя файла, 'ИМЯ ПОД КОТОРЫМ ЕГО УВИДИТ ПОЛЬЗОВАТЕЛЬ', 'application/force-download', true);
    Это должно находиться в файле download.php?
     
  19. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и класс весь перед этим
     
  20. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    Помоему тут
    Код (Text):
    1. if (($speed = $this->properties['max_speed']) > 0)
    2. $sleep_time = (8 / $speed) * 1e6;
    3. else
    4. $sleep_time = 0;
    Скобок не хватает
     
  21. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в одну строку допустимо без скобок, только это не удобно читать...
     
  22. Flint2010

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

    С нами с:
    13 янв 2012
    Сообщения:
    22
    Симпатии:
    0
    Короче, у меня не пашет. Белый лист. Показ ошибок включен. В логах сервера ничего не обычного, дальше не знаю куда копать.
     
  23. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    создай новую тему, приложи код и бум там куролесить
     
  24. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  25. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    можно.