Royal Flash
-=MaestrO=-
В документации к функции feof() есть заметка, как предотвратить зацикливание функции по таймауту:
Но у меня этот код не работает! Т.е. если сервер не вернул Connection: close или проще $sp = ''; скрипт зацикливается все равно. Я, правда, не совсем разобрался со ссылками &, но немного покопавшись нашел решение:
Установлен PHP 5.2 - возможно, в новых версиях, пример из оф. документации работает?
PHP:
<?php
function safe_feof($fp, &$start = NULL) {
$start = microtime(true);
return feof($fp);
}
/* Assuming $fp is previously opened by fsockopen() */
$start = NULL;
$timeout = ini_get('default_socket_timeout');
while(!safe_feof($fp, $start) && (microtime(true) - $start) < $timeout)
{
/* Handle */
}
?>
PHP:
$timeout = 5;
$start = microtime(true);
while(!feof($fp) && (microtime(true) - $start) < $timeout)
{
$answer .= fgets($fp, 4096);
}