Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   Как узнать размер удаленного файла (http://www.flasher.ru/forum/showthread.php?t=31209)

evgenz 06.05.2002 16:42

Как узнать размер удаленного файла
 
Есть УРЛ : http://site/file.zip лежит он на другом сервере возможно в другой стране...


Пишу
filesize ("http://site/file.zip");

на что он мне пишет
Warning: stat failed for http://site/file.zip (errno=2 - No such file or directory) in /pub/home/game.php on line 84

думал нет доступа к файлу
fopen() работает...

Так что читать из него по байту пока EOF не сработает....
криво

Crazy 06.05.2002 16:46

Re: Как узнать размер удаленного файла
 
Цитата:

Оригинал написал(а) evgenz
Пишу
filesize ("http://site/file.zip");

Читаем доки, ибо они суть рулез: "This function will not work on remote files; the file to be examined must be accessible via the server's filesystem."

Цитата:


Так что читать из него по байту пока EOF не сработает....
криво

Надежный способ только один -- тот, что ты только что озвучил. Есть альтернатива, которая будет работать на некоторых серверах: в заголовке HTTP-ответа может быть указан размер файла. Так что читай RFC на HTTP... :)

evgenz 06.05.2002 17:17

А если файл мег или 2 так на любом серваке тайм аут кончится..
Вообщем ясно рационального выхода нет, если только читать по килобайтам и усреднять

SPV 06.05.2002 17:21

Есть такой запрос:
HEAD /any.file HTTP/1.0

На что сервер выплёвывает инфу о файле /any.file, где должен (ну просто обязан) быть его размер.

Crazy 06.05.2002 17:22

Цитата:

Оригинал написал(а) evgenz
А если файл мег или 2 так на любом серваке тайм аут кончится..
В самом деле?

Цитата:


Вообщем ясно рационального выхода нет, если только читать по килобайтам и усреднять

Мсье полагает, что чтение по килобайтам чем-то принципиально отличается от чтения по байтам? Или имеется в виду тормознутость PHP?

(Hint: операция чтения в PHP, IMHO, буферизуется).

Crazy 06.05.2002 17:23

Цитата:

Оригинал написал(а) SPV
На что сервер выплёвывает инфу о файле /any.file, где должен (ну просто обязан) быть его размер.
Практика показывает, что вовсе не обязан. :) Но часто бывает.

SPV 06.05.2002 17:28

2Crazy
если запрошен действительно файл на диске, а не скрипт и т.п., то размер будет дан на 99.9%.

evgenz 06.05.2002 17:35

А если можно поподробнее как этот запрос выполнить...
Ну не пользовался такими прикольными феньками...

evgenz 06.05.2002 17:37

Ну и соответственно обрабатывать то что "выплюнет" сервер

Crazy 06.05.2002 17:41

Цитата:

Оригинал написал(а) SPV
если запрошен действительно файл на диске, а не скрипт и т.п., то размер будет дан на 99.9%.
Точнее, если файл отдается непосредственно http-сервером и этот сервер -- Apache или IIS, то 100%.

Если выдается через какое-либо серверное расширение независимо от типа, то вероятность снижается. Поскольку по URL'у невозможно гарантированно определить, что перед на нами самом деле, то нужно все же учитывать, что размер вполне может быть неопределен до момента реальной выдачи по POST/GET.

Crazy 06.05.2002 17:44

Цитата:

Оригинал написал(а) evgenz
А если можно поподробнее как этот запрос выполнить...
Почитай вот здесь: http://www.zend.com/manual/ref.sockets.php

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

evgenz 06.05.2002 18:49

Спасибо за подмогу!!!
В целом все ясно кроме самого запроса

HEAD /http://site.ru/file.zip HTTP/1.0
||
HEAD http://site.ru/file.zip HTTP/1.0
||
HEAD /site.ru/file.zip HTTP/1.0

SPV 06.05.2002 18:53

HEAD /file.zip HTTP/1.0
Host: site.ru

Вторая строка на всякий случай, вдруг хост виртуальный.

Crazy 06.05.2002 19:03

Цитата:

Оригинал написал(а) SPV
Вторая строка на всякий случай, вдруг хост виртуальный.
...а таковых у нас -- подавляющее большинство. :)

evgenz 06.05.2002 19:05

И что бы я без вас делал ;)
Спасибо всем, блин, большое!!! :)


Часовой пояс GMT +4, время: 13:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.