Загрузка файлов с удалённого сервера
Возникло две проблемки.
1. Если полученный сервером ответ выводить сразу в браузер, то всё ок, и картинки отображаются. А если сохранить сначала в какой-нибудь файл всё это дело, а потом попытаться посмотреть ту же картинку, то ничего не выходит.. Она на отоюражается, то есть при записи в файл что-то портится. Что? Как испоавить? Сервер у меня Apache (не russian).
2. Каким образом можно получить только определённую часть файла с удалённого сервера, а не весь сразу?
Загружаю файл на свой сервер с удалённого, используя fsockopen() и посылая соответствующий хттп-запрос.
Возникло две проблемки.
1. Если полученный сервером ответ выводить сразу в браузер, то всё ок, и картинки отображаются. А если сохранить сначала в какой-нибудь файл всё это дело, а потом попытаться посмотреть ту же картинку, то ничего не выходит.. Она на отоюражается, то есть при записи в файл что-то портится. Что? Как испоавить? Сервер у меня Apache (не russian).
2. Каким образом можно получить только определённую часть файла с удалённого сервера, а не весь сразу?
А почему бы ftp функциями не воспользоваться ?
Эти срипты были описаны на xakep.ru не раз.. (ХСТАФФ) (это не реклама :) )
А почему бы ftp функциями не воспользоваться ?
Эти срипты были описаны на xakep.ru не раз.. (ХСТАФФ) (это не реклама :) )
Кхм.. Не совсем понял. Я какчаю файл через хттп... Зачем мне фтп-функции?
И что там насчёт того, что файлы портятся? :)
2) Делай не безконечный цикл..
1) И что с ними так ? Что значат портятся ? (код покажи)
2) Делай не безконечный цикл..
1) Не знаю, что не так... Я же писал в первом посте, что если сразу в браузер полученную инфу выводить, то всё ок. К примеру, если грузить картинку, то она тут же будет показана.. А если Её сохранить в файл, а уже ИЗ НЕГО попытаться его посмотреть, то шиш там... Не показывает.
Я смотрел текствоые файлы - они не портятся... Всё ок. Нет мыслей?
2) Цикл у меня идёт до feof.
А чтобы файл скачать по частям, надо послать вот это в HTTP заголовке. Не все файлы можно скачать по частям - например создающиеся динамически.
первые 16Kb:
вторые 16Kb:
последние 16Kb:
Если сервер вернет 206 - значит закачака по частям невозможна.
Прикрепляю к этому посту файлик zip с двумя картинками - нормальной и испорченной...
Скорее всего в том и дело, что файл обрабатывается как текстовый, потому что тексты-то как раз не портятся ни капли.
Надеюсь, разберёмся :-)
Так оно и есть, у них даже размеры разные. Сделай так:
Я, конечно, предполагал, что всё решится просто, и проблема в какой-нибудь фигне... Не не настолько же!! :))
Спасибо, Mike! :)))
Если сервер вернет 206 - значит закачака по частям невозможна.
Не получается часть файла получить... Сервер возвращает 200 и всю страницу... Запрос такой:
"GET $path HTTP/1.0".$nn.
"Referer: $host".$nn.
"Host: $host".$nn.
"Range: bytes=0-10".$nn.
"User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".$nn.$nn;
Может опять не так что-то? :)
Не получается часть файла получить... Сервер возвращает 200 и всю страницу... Запрос такой:
"GET $path HTTP/1.0".$nn.
"Referer: $host".$nn.
"Host: $host".$nn.
"Range: bytes=0-10".$nn.
"User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".$nn.$nn;
Может опять не так что-то? :)
есть предположение что твой сервер не подерживает закачку, тогда часть скачать не возможно..
есть предположение что твой сервер не подерживает закачку, тогда часть скачать не возможно..
тогда сервер должен сказать не 200, а 206,
попробуй поменять HTTP/1.0 на HTTP/1.1
тогда сервер должен сказать не 200, а 206,
попробуй поменять HTTP/1.0 на HTTP/1.1
Поменял на HTTP/1.1.
На apache.org говорит 206 partial content. Понятно. А вот, к примеру, тут, на codenet.ru, говорит 200 и возвращает всю страницу, только в начале вот такая батва добавляется:
<HTML><HEAD>
<TITLE>CodeNet - все для программиста.</TITLE>
...дальше вся страница...
а в конце вот такая:
</BODY>
</HTML>
0
Прикольно :-)
А codenet.ru возвращает 200, потому что страница генерируется динамически, ее размер заранее не известен и она не может быть отправлена клиенту по частям.
А "d1c" о "0" в конце - это Chunked Encodeing.
Страница разбивается на блоки - сначала идет размер блока в шестнадцатеричной системе (0xD1C в данном случае), а потом данные блока, блоков может быть несколько, последний блок имеет размер "0".
Chunked Encodeing поддерживается с HTTP/1.1.
Лучше исправь HTTP/1.1 на HTTP/1.0 - тогда они пропадут :) А Partial Content скорее всего держится и в HTTP/1.0
Остальное вроде понял.. спасибо )