Forum Webscript.Ru
Программирование => PHP => Тема начата: Uzver от 14 Февраля 2006, 20:26:36
-
Второй день пытаюсь решить вопрос определения размера страницы по известному url. Все что удалось найти по этой теме это чтение страницы через fsockopen с последующим поиском в ответе строки вида Content-Length:… но как ни странно ни разу не получил эту строку в заголовках возвращаемых сервером.
Собственно вопрос, какие еще методы определения размера страницы? Пересчет полученного ответа по байтам или сохранение страницы в файл с последующим определением размера както то не очень хочется юзать.
-
мануал -> file_size() (http://www.php.net/manual/en/function.filesize.php)
-
for_i_0:
мануал -> file_size()
Повторюсь еще раз "Пересчет полученного ответа по байтам или сохранение страницы в файл с последующим определением размера както то не очень хочется юзать". Определяется размер веб-страницы, удаленной.
-
Uzver
Интересно, а как иначе ты это себе предстовляешь ?
-
[p]strlen[/p]
-
for_i_0:
Интересно, а как иначе ты это себе предстовляешь ?
если верить мануалам и прмерам выложенным в нет то следюющий пример должен напечатать размер страницы:
$urlArray = parse_url("http://forums.webscript.ru/");
if (!isset($urlArray["port"])) $urlArray["port"] = "80";
if (!isset($urlArray["path"])) $urlArray["path"] = "/";
if ($urlArray["host"] != gethostbyname($urlArray["host"])) {
$fp = fsockopen ($urlArray[host], $urlArray[port], $errno, $errstr, 10);
if (isset($fp)) {
socket_set_blocking($fp);
fputs ($fp, "HEAD $urlArray[path] HTTP/1.1\\r\\nHost: $urlArray[host]\\r\\nConnection: Close\\r\\n\\r\\n");
while ($str = fgets($fp, 1024)) {
if (ereg("^Content-Length: ([0-9]+)",$str,$size)) {echo $size[1];}
}
fclose($fp);
flush();
}
}
-
но вот срабатывает он лиш в единичьных случаях, сервер просто не возвращает в загаловках нужную информацию, но вот почему понять не могу, вродебы от настроек сервера это не должно зависить
-
феерический топик
-
RomikChef:
феерический топик
ну не знаю, мне совсем не радостно :-(
-
а меня прёт.
что с твоих умозаключений, что - особенно - с ответов =)
в этом топике вообще никто не понимает, как работает то, о чём говорят.
-
RomikChef:
что с твоих умозаключений, что - особенно - с ответов =)
о, я сумел комуто поднять настроение, это радует, вот ктоб еще мне его поднял, чуть чуть
-
Напрямую file_size(\'http://site.ru/\') не работает.
$fo=fopen("http://site.ru/","r") - так вы можете открыть файл.
Но это не поможет. Надо считать файл в строку.
Для этого имплодим массив строчек.
$cont = implode (\'\', file (\'http://site.ru/\'));
$size=strlen($cont); // вот вам и размер файла в граммах.
Увы, не на всех серверах это работает....
-
andymc:
$size=strlen($cont); // вот вам и размер файла в граммах.
читайте внимательно вопрос
Пересчет полученного ответа по байтам или сохранение страницы в файл с последующим определением размера както то не очень хочется юзать
-
Uzver
читайте внимательно вопрос
Пересчет полученного ответа по байтам или сохранение страницы в файл с последующим определением размера както то не очень хочется юзать
Извините, а кто Вам сказал, что сервер выдаст подобную информацию? Кстати, это не относится к PHP никак.
Чтобы было понятно совсем:
Я некий вебмастер, который хочет знать какой именно размер имеет страница на некоем [стороннем] сайте. Если страница того сервера статична, то у вас всё ok.
Если нет - то в заголовке через сокс ничего получить нельзя. Поэтому ваш пример и не работает.
Конечно, можно поднастроить вебсервер иначе..., но не думаю, что вам пойдут навстречу... ;-)
-
Единственный, на мой взгляд, надежный способ получить размер страницы на чужом сайте - открыть сокет, считать все целиком, отрезать заголовки. Другого надежного способа нет - сервер может и не выдавать ContentType.
-
в том то и проблема что выдает через раз, даже на статику, бывает что одни и теже страницы раз возвращают размер а другой раз нет, видимо таки придется пересчитывать побайтно :-(
-
самый простой способ - это не брать страницы, а отдавать.
для этого вебсайты придуманы.
тема закрыта.