За последние 24 часа нас посетили 51320 программистов и 1758 роботов. Сейчас ищут 754 программиста ...

Помогите! - Прямой даунлоад через сайт

Тема в разделе "PHP для новичков", создана пользователем rerger, 28 янв 2008.

  1. rerger

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

    С нами с:
    28 янв 2008
    Сообщения:
    5
    Симпатии:
    0
    Передо мной стоит такая задача: есть фтп-сервер, на котором хранятся файлы pdf (около 10 гиг).
    Есть сайт на площадке у хостера, на котором посетитель после регистрации должен получить возможность эти файлы скачивать.
    Прямые ссылки на тот сервер где лежат файлы нельзя давать из соображений безопасности.
    Нужно - скрипт, который при запросе файла по протоколу фтп с сайта сам шел бы на сервер с файлами, открывал нужный файл и отдавал его потоком запросившему пользователю через сервер, накотором размещается сайт.

    Поскольку файлы большие, вариант с тем, чтобы спрева слить файл с удаленного сервера на хостинг а потогм отдать клиенту - не проходит, клиент отваливается по таймауту пока сервера качают файл между собой.

    Разбирался долго, написал приведенный ниже скрипт. В результате, скачивание идет, но размер того, что скачано в несколько раз превышает исходный файл и не открывается.

    Пожалуйста, помогите! Мозг уже порвало..

    Код (Text):
    1.  
    2. $ftp_server = 'ххх.ххх.40.27';
    3. $ftp_user_name = 'site';
    4. $ftp_user_pass = '12345';
    5. $remote_file = urldecode ("/" . $fabric . "/" . $item); $local_file = urldecode ($root . "/download/" . $item);
    6.        
    7. $addr = "ftp://" . $ftp_user_name . ":" . $ftp_user_pass . "@" . $ftp_server . $remote_file;
    8.  
    9. $handle = fopen($addr, "w");
    10.  
    11. header('Content-type: '.$content_type);
    12. header('Content-Disposition: attachment; filename='.$item);
    13.    
    14. while (!feof($handle)) {
    15.       fread($handle, 8192);
    16. }
    17.  
    18. fclose($handle);
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    это что за понятие?
    прочли, и куда выдали?
     
  3. rerger

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

    С нами с:
    28 янв 2008
    Сообщения:
    5
    Симпатии:
    0
    Файлы, как я писАл - pdf. "Не открывается" - значит, что Acrobat Reader не может их открыть.

    Запросившему пользователю в поток.
    У меня такого типа конструкция работала, когда я отдавал предварительно скачанный на сервер файл.
     
  4. Anonymous

    Anonymous Guest

    Не вижу. Покажите строчку.
     
  5. rerger

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

    С нами с:
    28 янв 2008
    Сообщения:
    5
    Симпатии:
    0
    А разве то, что не указана переменная не заставяет функцию автоматом выдавать результат работы на страницу?
    Тогда что же у меня скачивается при запуске этого скрипта?? %-/
     
  6. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а каого ты на записить открываешь?

    $handle = fopen($addr, "rb");
     
  7. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    while (!feof($handle)) {
    echo $fread($handle, 8192);
    }
     
  8. rerger

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

    С нами с:
    28 янв 2008
    Сообщения:
    5
    Симпатии:
    0
    Ой... :oops: Спасибо огромное!! Прошу прощения за ламерский вопрос, ночь подорвала психическое здоровье на корню..
    Спасибо!
    А разве
    Код (Text):
    1.  echo [b]$[/b]fread($handle, 8192);
    , может
    Код (Text):
    1.  echo fread($handle, 8192);
    ?
     
  9. rerger

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

    С нами с:
    28 янв 2008
    Сообщения:
    5
    Симпатии:
    0
    Пардон, был невнимателен, copy-paste меня погубит.. Пасиб.
     
  10. Mastyf

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

    С нами с:
    26 янв 2008
    Сообщения:
    5
    Симпатии:
    0
    Использование X-Accel-Redirect с Nginx для реализации контролируемых скачиваний (с примерами для rails и php)

    http://blog.kovyrin.net/2006/11/01/ngin ... s/lang/ru/

    Но для такой простой реализации нужен своей сервер + nginx на нем.