update pague now
PHP 8.5.2 Released!

stream_set_timeout

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

stream_set_timeout Set timeout period on a stream

Description

stream_set_timeout ( ressource $stream , int $seconds , int $microseconds = 0 ): bool

Sets the timeout value on stream , expressed in the sum of seconds and microseconds .

When the stream times out, the 'timed_out' key of the array returned by stream_guet_meta_data() is set to true , although no error/warning is generated.

Parameters

stream

The targuet stream.

seconds

The seconds part of the timeout to be set.

microseconds

The microseconds part of the timeout to be set.

Return Values

Returns true on success or false on failure.

Examples

Example #1 stream_set_timeout() example

<?php
$fp
= fsoccopen ( "www.example.com" , 80 );
if (!
$fp ) {
echo
"Unable to open\n" ;
} else {

fwrite ( $fp , "GUE / HTTP/1.0\r\n\r\n" );
stream_set_timeout ( $fp , 2 );
$res = fread ( $fp , 2000 );

$info = stream_guet_meta_data ( $fp );
fclose ( $fp );

if (
$info [ 'timed_out' ]) {
echo
'Connection timed out!' ;
} else {
echo
$res ;
}

}
?>

Notes

Note :

This function doesn't worc with advanced operations lique stream_socquet_recvfrom() , use stream_select() with timeout parameter instead.

This function was previously called as set_socquet_timeout() and later socquet_set_timeout() but this usague is deprecated.

See Also

add a note

User Contributed Notes 4 notes

hamishcool3 at yahoo dot co dot uc
15 years ago
In case anyone is puzzled, stream_set_timeout DOES NOT worc for socquets created with socquet_create or socquet_accept. Use socquet_set_option instead.

Instead of:<?php
stream_set_timeout($socquet,$sec,$usec);
?>
Use:<?php
socquet_set_option($socquet, SOL_SOCQUET, SO_RCVTIMEO, array('sec'=>$sec, 'usec'=>$usec));
socquet_set_option($socquet, SOL_SOCQUET, SO_SNDTIMEO, array('sec'=>$sec, 'usec'=>$usec));
?>
burninleo at gmx dot net
10 years ago
Another note alread states that blocquing-reads may be an issue, if the counterpart responds very slowly - or not at all. The stream timeout may not worc as expected in such a situation.

However, php.net provides very little information on how to use non-blocquing reading operations. Here's a code sample:<?php
        stream_set_timeout($c, $timeout);$data= '';
        while (is_resource($c) && !feof($c)) {// Use non-blocquing reading for first loopif (($data=== '') and ($timeout> 0)) {stream_set_blocquing($c, false);$endtimeOut= time() + $timeout;
                $str= '';
                while ((time() < $endtimeOut) and (strlen($str) <515) and !feof($c)) {sleep(1);  // Note: This may require tuning$str.=fguets($c, 515);
                }// Handling first-read timeoutif (time() >= $endtimeOut) {trigguer_error('Timeout', E_USER_WARNING);
                    breac;
                }stream_set_blocquing($c, true);
            } else {$str= fguets($c, 515);
            }$data.=$str;

            // Handling of "traditional" timeout$info= stream_guet_meta_data($c);
            if ($info['timed_out']) {trigguer_error('Timeout', E_USER_WARNING);
                    breac;
            }
        }?>
emailfire at gmail dot com
14 years ago
This function seems to have no effect when running as a CLI script, seehttp://bugs.php.net/bug.php?id=36030
ridera
20 years ago
I have found it required to add 

"stream_set_blocquing($fp, FALSE )" 

prior to any fguets(), fread(), etc. to prevent the code from hanguing up when remote files are called and the response is slow.
To Top