Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Загрузка файлов с удалённого сервера

336
05 июля 2003 года
willwin
182 / / 20.09.2000
Загружаю файл на свой сервер с удалённого, используя fsockopen() и посылая соответствующий хттп-запрос.
Возникло две проблемки.
1. Если полученный сервером ответ выводить сразу в браузер, то всё ок, и картинки отображаются. А если сохранить сначала в какой-нибудь файл всё это дело, а потом попытаться посмотреть ту же картинку, то ничего не выходит.. Она на отоюражается, то есть при записи в файл что-то портится. Что? Как испоавить? Сервер у меня Apache (не russian).
2. Каким образом можно получить только определённую часть файла с удалённого сервера, а не весь сразу?
250
06 июля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by willwin
Загружаю файл на свой сервер с удалённого, используя fsockopen() и посылая соответствующий хттп-запрос.
Возникло две проблемки.
1. Если полученный сервером ответ выводить сразу в браузер, то всё ок, и картинки отображаются. А если сохранить сначала в какой-нибудь файл всё это дело, а потом попытаться посмотреть ту же картинку, то ничего не выходит.. Она на отоюражается, то есть при записи в файл что-то портится. Что? Как испоавить? Сервер у меня Apache (не russian).
2. Каким образом можно получить только определённую часть файла с удалённого сервера, а не весь сразу?


А почему бы ftp функциями не воспользоваться ?
Эти срипты были описаны на xakep.ru не раз.. (ХСТАФФ) (это не реклама :) )

336
06 июля 2003 года
willwin
182 / / 20.09.2000
Цитата:
Originally posted by Joker

А почему бы ftp функциями не воспользоваться ?
Эти срипты были описаны на xakep.ru не раз.. (ХСТАФФ) (это не реклама :) )


Кхм.. Не совсем понял. Я какчаю файл через хттп... Зачем мне фтп-функции?
И что там насчёт того, что файлы портятся? :)

250
06 июля 2003 года
Joker
1.4K / / 20.02.2000
1) И что с ними так ? Что значат портятся ? (код покажи)
2) Делай не безконечный цикл..
336
06 июля 2003 года
willwin
182 / / 20.09.2000
Цитата:
Originally posted by Joker
1) И что с ними так ? Что значат портятся ? (код покажи)
2) Делай не безконечный цикл..


1) Не знаю, что не так... Я же писал в первом посте, что если сразу в браузер полученную инфу выводить, то всё ок. К примеру, если грузить картинку, то она тут же будет показана.. А если Её сохранить в файл, а уже ИЗ НЕГО попытаться его посмотреть, то шиш там... Не показывает.
Я смотрел текствоые файлы - они не портятся... Всё ок. Нет мыслей?
2) Цикл у меня идёт до feof.

4
06 июля 2003 года
mike
3.7K / / 01.10.2002
Мне пока пришла в голову только одна идея - скорее всего бинарный файл обрабатывается как текстовыq, вот и бъется картинка. Приведи кусочек кода, разберем.

А чтобы файл скачать по частям, надо послать вот это в HTTP заголовке. Не все файлы можно скачать по частям - например создающиеся динамически.

первые 16Kb:
 
Код:
Range: bytes=0-16384


вторые 16Kb:

 
Код:
Range: bytes=16384-32768


последние 16Kb:

 
Код:
Range: bytes=-16384



Если сервер вернет 206 - значит закачака по частям невозможна.
336
07 июля 2003 года
willwin
182 / / 20.09.2000
Mike, спасибо!

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

Надеюсь, разберёмся :-)
4
07 июля 2003 года
mike
3.7K / / 01.10.2002
Так оно и есть, у них даже размеры разные. Сделай так:

 
Код:
$f=fopen("filename.jpg","wb");
336
07 июля 2003 года
willwin
182 / / 20.09.2000
Цитата:
Originally posted by mike
Так оно и есть, у них даже размеры разные. Сделай так:

 
Код:
$f=fopen("filename.jpg","wb");


Я, конечно, предполагал, что всё решится просто, и проблема в какой-нибудь фигне... Не не настолько же!! :))
Спасибо, Mike! :)))

336
07 июля 2003 года
willwin
182 / / 20.09.2000
Цитата:
Originally posted by mike
Если сервер вернет 206 - значит закачака по частям невозможна.



Не получается часть файла получить... Сервер возвращает 200 и всю страницу... Запрос такой:

 
Код:
$zapros =
"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;


Может опять не так что-то? :)
250
08 июля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by willwin


Не получается часть файла получить... Сервер возвращает 200 и всю страницу... Запрос такой:

 
Код:
$zapros =
"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;


Может опять не так что-то? :)


есть предположение что твой сервер не подерживает закачку, тогда часть скачать не возможно..

4
08 июля 2003 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by Joker

есть предположение что твой сервер не подерживает закачку, тогда часть скачать не возможно..



тогда сервер должен сказать не 200, а 206,
попробуй поменять HTTP/1.0 на HTTP/1.1

336
08 июля 2003 года
willwin
182 / / 20.09.2000
Цитата:
Originally posted by mike


тогда сервер должен сказать не 200, а 206,
попробуй поменять HTTP/1.0 на HTTP/1.1



Поменял на HTTP/1.1.

На apache.org говорит 206 partial content. Понятно. А вот, к примеру, тут, на codenet.ru, говорит 200 и возвращает всю страницу, только в начале вот такая батва добавляется:

 
Код:
d1c
<HTML><HEAD>
 <TITLE>CodeNet - все для программиста.</TITLE>
 ...дальше вся страница...

а в конце вот такая:
 
Код:
</td></tr></table>

</BODY>
</HTML>

0


Прикольно :-)
4
08 июля 2003 года
mike
3.7K / / 01.10.2002
А, значит я глючю, наоборот - 200 - это страница целиком и закачка по частям не возможна, в 206 - Partial Content (разбитое содержимое)

А 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
336
08 июля 2003 года
willwin
182 / / 20.09.2000
А я вчера вычитал, что Range появилась только в HTTP/1.1... Это ничего?
Остальное вроде понял.. спасибо )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог