Передо мной стоит такая задача: есть фтп-сервер, на котором хранятся файлы pdf (около 10 гиг). Есть сайт на площадке у хостера, на котором посетитель после регистрации должен получить возможность эти файлы скачивать. Прямые ссылки на тот сервер где лежат файлы нельзя давать из соображений безопасности. Нужно - скрипт, который при запросе файла по протоколу фтп с сайта сам шел бы на сервер с файлами, открывал нужный файл и отдавал его потоком запросившему пользователю через сервер, накотором размещается сайт. Поскольку файлы большие, вариант с тем, чтобы спрева слить файл с удаленного сервера на хостинг а потогм отдать клиенту - не проходит, клиент отваливается по таймауту пока сервера качают файл между собой. Разбирался долго, написал приведенный ниже скрипт. В результате, скачивание идет, но размер того, что скачано в несколько раз превышает исходный файл и не открывается. Пожалуйста, помогите! Мозг уже порвало.. Код (Text): $ftp_server = 'ххх.ххх.40.27'; $ftp_user_name = 'site'; $ftp_user_pass = '12345'; $remote_file = urldecode ("/" . $fabric . "/" . $item); $local_file = urldecode ($root . "/download/" . $item); $addr = "ftp://" . $ftp_user_name . ":" . $ftp_user_pass . "@" . $ftp_server . $remote_file; $handle = fopen($addr, "w"); header('Content-type: '.$content_type); header('Content-Disposition: attachment; filename='.$item); while (!feof($handle)) { fread($handle, 8192); } fclose($handle);
Файлы, как я писАл - pdf. "Не открывается" - значит, что Acrobat Reader не может их открыть. Запросившему пользователю в поток. У меня такого типа конструкция работала, когда я отдавал предварительно скачанный на сервер файл.
А разве то, что не указана переменная не заставяет функцию автоматом выдавать результат работы на страницу? Тогда что же у меня скачивается при запуске этого скрипта?? %-/
Ой... Спасибо огромное!! Прошу прощения за ламерский вопрос, ночь подорвала психическое здоровье на корню.. Спасибо! А разве Код (Text): echo [b]$[/b]fread($handle, 8192); , может Код (Text): echo fread($handle, 8192); ?
Использование X-Accel-Redirect с Nginx для реализации контролируемых скачиваний (с примерами для rails и php) http://blog.kovyrin.net/2006/11/01/ngin ... s/lang/ru/ Но для такой простой реализации нужен своей сервер + nginx на нем.