Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: fopen с таймаутом

Сообщения:  [1-10]   [11-17] 

 
 автор: helpdes   (08.01.2006 в 03:29)
 
   для: cheops   (08.01.2006 в 03:13)
 

Верно... Проблема была в win-сервере.
Поставил на Freebsd и все ок .
Всем спасибо за ночную дискусию, очень приятно, что есть такие люди.
До встречи с новой проблемой ;)

   
 
 автор: Artem S.   (08.01.2006 в 03:28)   письмо автору
 
   для: helpdes   (08.01.2006 в 02:48)
 

Попробуйте так:
<?php
/*
Получение станицы методом GET */
function getData($host$path$proxy false$proxyport 80$get true$maxsize false)
{
    
$buffer true;
    if (empty(
$path)) $path='/';
    if ( !
$proxy ) {
         
$proxy $host;
         
$out  "GET $path HTTP/1.0\r\n";
         
$out .= "Host: $host\r\n";
     } else {
         
$out  "GET http://$host$path HTTP/1.0\r\n";
         
$out .= "Host: $host\r\n";
     }
     
$fp = @fsockopen("tcp://".$proxy$proxyport$errno$errstr5);
     if (!
$fp) {
         return 
false;
     } else {
         
$out .= "Referer: $host$path\r\n";
         
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
         
$out .= "Connection: close\r\n";
         
$out .= "\r\n";
         
fwrite($fp$out);
         
stream_set_blocking($fpFALSE);
         
stream_set_timeout($fp5);
         if(
$get)
         {
             
$status stream_get_meta_data($fp);
             while (!
feof($fp) && !$status['timed_out'])
             {
                 
$buffer .= fgets($fp128);
                 if(
$maxsize) {
                     if( 
strlen($buffer) > $maxsize ) break;
                 }
                 
$status stream_get_meta_data($fp);
             }
         }
         
fclose($fp);
     }
     return 
$buffer;
}
echo 
getData("gamer.mysite.net.ua""/pvpgn-stats/index.php")
?>

   
 
 автор: cheops   (08.01.2006 в 03:13)   письмо автору
 
   для: Artem S.   (08.01.2006 в 03:04)
 

Об них, кстати, можно почитать в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=600.

   
 
 автор: Artem S.   (08.01.2006 в 03:04)   письмо автору
 
   для: helpdes   (08.01.2006 в 02:57)
 

это глюки библиотеки php под win. Из-за этого я перешел на "другие" сокеты (socket_create())

   
 
 автор: helpdes   (08.01.2006 в 02:57)
 
   для: cheops   (08.01.2006 в 02:53)
 

Вычитал в указаных Вами ссылках и заменил на 1.0.
Никакого положительного результата.

   
 
 автор: cheops   (08.01.2006 в 02:53)   письмо автору
 
   для: helpdes   (08.01.2006 в 02:48)
 

Вообще сокеты достаточно медленная вещь, попробуйте строку
<?php
    $out 
"GET /pvpgn-stats/index.php HTTP/1.1\r\n";
?>

заменить на
<?php
    $out 
"GET /pvpgn-stats/index.php HTTP/1.0\r\n";
?>

   
 
 автор: helpdes   (08.01.2006 в 02:48)
 
   для: helpdes   (08.01.2006 в 00:20)
 

Вот код, модифицировал при Вашй помощи так сказать.
Все работает, за что очень Вам благодарен, но есть одно НО.
Выставил таймаут как видите 1 секунду, а скрипт думает гараздо дольше, около 15-20.
В чем может быть подвох?

<?php 
$fp 
fsockopen("gamer.mysite.net.ua"80$errno$errstr1); 
  if (!
$fp
  { 
$kod2 "0"
} else { 
    
$out "GET /pvpgn-stats/index.php HTTP/1.1\r\n"
    
$out .= "Host: games.mysite.net.ua\r\n"
    
$out .= "Connection: Close\r\n\r\n"
    
fwrite($fp$out); 
    
$txt '';
    while (!
feof($fp)) { 
        
$txt .= fgets($fp8192); 
    } 
    
$p1=strpos($txt,"Онлайн : <b>")+12
    
$p2=strpos($txt,"Чат каналов")-15
    
$kod2=substr($txt,$p1,$p2-$p1); 
    
fclose($fp);
}
echo 
$kod2;
?> 

Что ему не хватает ? :думает:

   
 
 автор: cheops   (08.01.2006 в 02:31)   письмо автору
 
   для: helpdes   (08.01.2006 в 02:00)
 

Тогда блок
<?php
if($f=@fopen('http://bla-bla.nets','r')){ 
    
$txt ''
    while (!
feof($f)){ 
        
$txt .= fread($f8192); 
    }
?>

следует заменить на
<?php
<?php 
  $fp 
fsockopen("games.mysite.net.ua"80$errno$errstr30); 
  if (!
$fp
  { 
    echo 
"$errstr ($errno)<br />\n"
  } else { 
    
$out "GET /bnet/monitor.php HTTP/1.1\r\n"
    
$out .= "Host: games.mysite.net.ua\r\n"
    
$out .= "Connection: Close\r\n\r\n"

    
fwrite($fp$out); 
    
$txt ''
    while (!
feof($fp)) { 
        
$txt .= fgets($fp8192); 
    } 
    
fclose($fp); 
?>


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=600

   
 
 автор: helpdes   (08.01.2006 в 02:00)
 
   для: cheops   (08.01.2006 в 01:53)
 

Дело в том, что сайт у меня в локальной сети, а адреес к нему таков:
games.mysite.net.ua/bnet/monitor.php

   
 
 автор: cheops   (08.01.2006 в 01:53)   письмо автору
 
   для: helpdes   (08.01.2006 в 01:24)
 

Да выдрать это не сложно, а как выглядит адрес страницы с этой информации? Для использования в fsockopen() его нужно поделить на хост и путь с параметрами...

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования