stream_set_timeout

(PHP 4 >= 4.3.0, PHP 5)

stream_set_timeoutУстанавливает значение тайм-аута на потоке

Описание

bool stream_set_timeout ( resource $stream , int $seconds [, int $microseconds = 0 ] )

Устанавливает значение тайм-аута на потоке stream, равное сумме параметров seconds и microseconds.

Когда время работы потока истекает, ключ 'timed_out' массива, возвращаемого функцией stream_get_meta_data(), устанавливается в значение TRUE, хотя ошибка или предупреждение не генерируется.

Список параметров

stream

Целевой поток.

seconds

Секунды в устанавливаемом тайм-ауте.

microseconds

Микросекунды в устанавливаемом тайм-ауте.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
4.3.0 Начиная с PHP 4.3 эта функция может (потенциально) работать на любом типе потока. В PHP 4.3 потоки, основанные на сокетах - это единственный тип потоков, поддерживаемый в ядре PHP, хотя потоки из других расширений могут поддерживать эту функцию.

Примеры

Пример #1 Пример использования stream_set_timeout()

<?php
$fp 
fsockopen("www.example.com"80);
if (!
$fp) {
    echo 
"Невозможно открыть сокет\n";
} else {

    
fwrite($fp"GET / HTTP/1.0\r\n\r\n");
    
stream_set_timeout($fp2);
    
$res fread($fp2000);

    
$info stream_get_meta_data($fp);
    
fclose($fp);

    if (
$info['timed_out']) {
        echo 
'Истекло время соединения!';
    } else {
        echo 
$res;
    }

}
?>

Примечания

Замечание:

Эта функция не работает с продвинутыми операциями, такими, как stream_socket_recvfrom(). Используйте вместо неё stream_select() с параметром тайм-аута

Эта функция раньше вызывалась через set_socket_timeout() и позднее через socket_set_timeout(), но это использование устарело.

Смотрите также

  • fsockopen() - Открывет соединение с интернет сокетом или доменным сокетом Unix
  • fopen() - Открывает файл или URL

Коментарии

Автор:
I have found it required to add 

"stream_set_blocking($fp, FALSE )" 

prior to any fgets(), fread(), etc. to prevent the code from hanging up when remote files are called and the response is slow.
2005-02-17 07:37:10
http://php5.kiev.ua/manual/ru/function.stream-set-timeout.html
In case anyone is puzzled, stream_set_timeout DOES NOT work for sockets created with socket_create or socket_accept. Use socket_set_option instead.

Instead of:
<?php
stream_set_timeout
($socket,$sec,$usec);
?>

Use:
<?php
socket_set_option
($socketSOL_SOCKETSO_RCVTIMEO, array('sec'=>$sec'usec'=>$usec));
socket_set_option($socketSOL_SOCKETSO_SNDTIMEO, array('sec'=>$sec'usec'=>$usec));
?>
2010-10-29 12:29:35
http://php5.kiev.ua/manual/ru/function.stream-set-timeout.html
This function seems to have no effect when running as a CLI script, see http://bugs.php.net/bug.php?id=36030
2011-05-18 04:28:20
http://php5.kiev.ua/manual/ru/function.stream-set-timeout.html
Another note alread states that blocking-reads may be an issue, if the counterpart responds very slowly - or not at all. The stream timeout may not work as expected in such a situation.

However, php.net provides very little information on how to use non-blocking reading operations. Here's a code sample:

<?php
        stream_set_timeout
($c$timeout);
       
$data '';
        while (
is_resource($c) && !feof($c)) {
           
// Use non-blocking reading for first loop
           
if (($data === '') and ($timeout 0)) {
               
stream_set_blocking($cfalse);
               
$endtimeOut time() + $timeout;
               
$str '';
                while ((
time() < $endtimeOut) and (strlen($str) < 515) and !feof($c)) {
                   
sleep(1);  // Note: This may require tuning
                   
$str.= fgets($c515);
                }
               
// Handling first-read timeout
               
if (time() >= $endtimeOut) {
                   
trigger_error('Timeout'E_USER_WARNING);
                    break;
                }
               
stream_set_blocking($ctrue);
            } else {
               
$str fgets($c515);
            }
           
$data.= $str;

           
// Handling of "traditional" timeout
           
$info stream_get_meta_data($c);
            if (
$info['timed_out']) {
                   
trigger_error('Timeout'E_USER_WARNING);
                    break;
            }
        }
?>
2016-01-10 01:06:27
http://php5.kiev.ua/manual/ru/function.stream-set-timeout.html

    Поддержать сайт на родительском проекте КГБ