feof() не работает

_RVK_

Новичок
feof() не работает

PHP:
     while (!feof($this->fp))
     {
         $this->result .= fgets($this->fp,256);
     }
Зависает :(

$this->fp. Результат открытия сокета. Сокет открывается 100%. Из фала читается но доходит до конца и виснет.
 

_RVK_

Новичок
Собственно говоря, дело кажется в файле. Может такое быть чтоб в файле небыло символа EOF? Связь есть и, повторяю, страница читается...
 

Кром

Новичок
fgets($this->fp,256) здесь увеличь размер данных для считывания, скажем
fgets($this->fp,10000000)

>Может такое быть чтоб в файле небыло символа EOF?
Учитывая увеличивающиеся размеры жестких дисков, можно в плотную подойти к проблеме величины файлов, стремящейся к бесконечности. Соответственно и символ EOF может оказаться для нас на нерационально далеком расстоянии, что затруднит нам его скорое обнаружение и локализацию.
 

_RVK_

Новичок
:) увеличение размера строки не пмогает. Пытался так же и fread() использовать, работает, но жутко тормозит. такое чувство что функция останавливает чтение только когда проходит весь указанный размер файла. Дело в том что другие читаются нормально и только страницы с одного хоста так себя ведут. Может это зависеть от операционной сисчтемы на которой висит сервер или кодировки....?
 

Кром

Новичок
>это зависеть от операционной сисчтемы на которой висит сервер или кодировки....?

Абсолютно не зависит, если конечно ОС настроена прямыми руками. Это зависит (если работает, но жутко тормозит), от скорости канала у этого сервера. Так что думаю это не твоя проблема.

$fd = fopen ($file, "r");
while (!feof ($fd)) {
$buffer = fgets($fd, 4096);
echo $buffer;
}
fclose ($fd);

Попробуй простой пример. Будет ли быстро работать?
 

_RVK_

Новичок
Собственно говоря это и делал. Но он просто виснет в цикле. Вот используя fread() если указываю размер меньше длины файла выводится часть страницы и быстро. Если ставлю большой размер то тормозит. Делал так:
PHP:
while (!feof($this->fp) && $i<300) 
     { 
         $this->result .= fgets($this->fp,256); 
         $i++;
     }
Читает мне 300 строк и довольно быстро.
Убираю дополнительное условие, циклится.
 

_RVK_

Новичок
Вернёмся к проблеме. Попробовал. Не работает.
Проблема была с одним сайтом. Теперь обнаружил ещё несколько. Они раньше работали, потом не с того не ссего перестали. Я ума не приложу в чем дело. Программа ведь одна для множества сайтов, а не работают лишь некоторые.
 

tonym

Guest
feof тормозит

Есть скрипт

PHP:
$fp = fsockopen("www.site.ru", 80, &$errno, &$errstr, 30);
   if(!$fp) { print "$errstr ($errno)<br>\n"; exit; }

   if(fputs($fp,$zapros))
   {
   echo "<br>записали запрос<br>";
   flush();
   }


   while(!feof($fp))
    {
    $t=fgets($fp, 1024);
    echo htmlspecialchars($t);
    flush();
    }
Так вот, после того как уже выплюнуло </html> (это 100% конец файла) скрипт висит "получает данные" еще секунд 10!!!

При том, что до указанного </html> файл получается в теч. 5-8 сек.

Пробовал stream_get_meta_data() но он тоже тормозит
 

tonym

Guest
Originally posted by Diesel
Покажи заголовок запроса
PHP:
   // формирование заголовка
   $PostData=
   "lang=".urlencode("ru")."&".
   "status=".urlencode("translate")."&".
   "source=".urlencode($body)."&".
   "template=".urlencode($_POST['template'])."&".
   "SResalt=".urlencode("")."&".
   $trans.
   "direction=".urlencode($_POST['direction']);

   $len=strlen($PostData);

   $nn="\r\n";
   $zapros=
"POST /text.asp#tr_form HTTP/1.0".$nn.
"Referer: $ref".$nn.
"Content-Type: application/x-www-form-urlencoded".$nn.
"Content-Length: $len".$nn.
"Host: www.translate.ru".$nn.
"Accept: */*".$nn.
"Accept-Encoding: gzip, deflate".$nn.
"Connection: Keep-Alive".$nn.
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".$nn.
"".$nn.
"$PostData";
может это транслейт тормозит спецом?
 

_RVK_

Новичок
Ты же сам говоришь серверу не закрывать соединение :)
Надо: Connection:close. Т.е. сервер закроет соединение после окончания передачи.

-~{}~ 01.09.04 18:28:

Хотя странно что через 10 сек все же соединение закрывается.... Может не 10 а больше, и срабатывает time limit? А display_errors у тебя off?
 

tonym

Guest
Спасибо, протупил я :)
все заработало

Хотя странно что через 10 сек все же соединение закрывается.... Может не 10 а больше, и срабатывает time limit? А display_errors у тебя off?
а насчет этого - покапаюсь отпишу
 
Сверху