Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виснет скрипт, на функции fgets 
:(
    Опции темы
Wolf1994
Дата 22.11.2006, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Код

$get_size_timer="";
function get_size ( $url )
{
 global $get_size_timer;
 if ( !$get_size_timer || abs (time ()-$get_size_timer)>100 )
  $get_size_timer=time ();
 if ( time ()-$get_size_timer<18 )
 {
  $url_ar=@parse_url ($url);
  if ( $url_ar ['scheme'] )
  {
   $fp=@fsockopen ( $url_ar ['host'], 80, $errno, $errstr, 10 );
   if ( $fp )
   {
    $out.="GET ".$url_ar ['path']."?".$url_ar ['query']." HTTP/1.1\n";
    $out.="Referer: ".$url_ar ['scheme'].$url_ar ['host'].$url_ar ['path']."\n";
    $out.="Host: ".$url_ar ['host']."\n";
    $out.="Connection: Close\n\n";

    fwrite ($fp, $out);

    for ($i=0; $i<100 && !feof ($fp); $i++)
     $b.=fgets ($fp, 256)."\n";
    fclose($fp);

    preg_match ( '/Content\-Length\:[ ]*([0-9]+)/i', $b, $t_ar );
    preg_match ( '/Content\-Type:[ ]*(application)/Ui', $b, $t_ar2 );
    if ( is_numeric ($t_ar [1]) && $t_ar2 [1] )
     return floor ($t_ar [1]/1024);
    else
    {
     preg_match ( '/Location:[ ]*([^ '."\r\n".']+)/i', $b, $t_ar );
     if ( $t_ar [1] )
      return get_size ( $t_ar [1] );
    }
   }
  }
 }
}


Виснет при чтении ответа fgets.

Пробовал:
socket_set_timeout($fp, 2);    
stream_set_timeout($fp, 2);
- не помогло.
PM MAIL WWW   Вверх
-=Ustas=-
Дата 22.11.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Wolf1994, а зачем ты GET в заголовке используешь, может HEAD вполне хватит...


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Wolf1994
Дата 22.11.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Чтобы послать запрос методом GET, в случае наличия в URL переменных...

А как - правильно?
PM MAIL WWW   Вверх
-=Ustas=-
Дата 22.11.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Вот мне не понятно, для чего ты читаешь весь контент:
Код

for ($i=0; $i<100 && !feof ($fp); $i++)
     $b.=fgets ($fp, 256)."\n";
    fclose($fp);


Добавлено @ 16:02 
И что то я не врубаюсь в то, что ты возвращаешь этой функцией.... ссудя по всему тебе нужно получать размер http-страницы?!

Добавлено @ 16:06 
Вот тебе примерчик:
Код

<?php

function GetUrlSize($url)
{
    $purl = parse_url($url);
    $host = $purl['host'];
    $res  = '';
    $headers = '';

    if ($socket = fsockopen($host, 80, $errno, $errstr, 30)) {
        if (isset($purl['path'])) {
            $headers .= "HEAD ".$purl['path']." HTTP/1.0\r\n";
        } else {
            $headers .= "HEAD / HTTP/1.0\r\n";
        }
        $headers .= "Accept: */*\r\n";
        $headers .= "Accept-Language: ru\r\n";
        $headers .= "Referer: Ustas-Bot\r\n";
        $headers .= "Host: ".$purl['host']."\r\n";
        $headers .= "User-Agent: Ustix-Spider-Bot/1.0\r\n";
        $headers .= "Connection: Close\r\n\r\n";

        fputs($socket, $headers);

        while (!feof($socket)) {
            $res .= fgets($socket);
        }
        fclose($socket);
        
        preg_match('#Content\-Length\:\s+([0-9]+)#i', $res, $matches);
        
        return $matches[1];

    } else {

        return FALSE;
    }
}

$size = GetUrlSize('http://www.domain.com/page.html');
echo $size.' bytes';

?>



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 22.11.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



А зачем for??
Сделай как Юстас показал. У тебя же не известно кол-во повторений цикла. К тому же, откуда знаешь, что читать надо срого по 256 символов?
Видимо, доходя до последней строки, и прочитав ее, скрипт не дошел до признака конца файла... Да и условие должно быть ||
PM ICQ   Вверх
Wolf1994
Дата 22.11.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Совсем ничего не понимаю (

Цитата(-=Ustas=- @  22.11.2006,  16:00 Найти цитируемый пост)
Вот мне не понятно, для чего ты читаешь весь контент:

Не весь, а только первые 100 строчек, если не достигнут конец документа. Вообще нужно считать только заголовок, можно изменить на ~20 (?)...

Цитата(-=Ustas=- @  22.11.2006,  16:00 Найти цитируемый пост)
И что то я не врубаюсь в то, что ты возвращаешь этой функцией.... ссудя по всему тебе нужно получать размер http-страницы?!

Файла - приложения имеющего тип application.

Цитата(Mal Hack @  22.11.2006,  17:08 Найти цитируемый пост)
А зачем for??

Чтобы не читать всю страницу - иной раз попадаются файлы по 50 Мб, экономлю на трафике и ресурсах )

Цитата(Mal Hack @  22.11.2006,  17:08 Найти цитируемый пост)
К тому же, откуда знаешь, что читать надо срого по 256 символов?

Можно меньше - главное захватить Content-Length...

Цитата(Mal Hack @  22.11.2006,  17:08 Найти цитируемый пост)
Видимо, доходя до последней строки, и прочитав ее, скрипт не дошел до признака конца файла... Да и условие должно быть || 

Если бы скрипт дошёл до последней строки, не дойдя до конца файла, то по двойному условию он бы прекратил работу, поскольку одно утверждение стало бы ложным.
PM MAIL WWW   Вверх
-=Ustas=-
Дата 22.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Wolf1994, тогда HEAD как в моем примере. Он только заголовки прочитает и все, контент вообще трогать не будет.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Wolf1994
Дата 22.11.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



А подходит ли тип HEAD для передачи query ссылки?
PM MAIL WWW   Вверх
-=Ustas=-
Дата 23.11.2006, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Wolf1994 @  22.11.2006,  20:15 Найти цитируемый пост)
А подходит ли тип HEAD для передачи query ссылки?

Еще как.

Добавлено @ 09:07 
Смотри внимательнее ;)
Код

        if (isset($purl['path'])) {
            $headers .= "HEAD ".$purl['path']." HTTP/1.0\r\n";
        } else {
            $headers .= "HEAD / HTTP/1.0\r\n";
        }




--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.