How to get fopen to timeout properly?
I have the following snippet of php code
if($fp = fopen($url, 'r')) {
stream_set_timeout($fp, 1);
stream_set_blocking($fp, 0);
}
$info = stream_get_meta_data($fp);
I'd like the request to timeout after 1 second. If I put a sleep(20)
in my $url
that I'm reading, it just waits the whole 20 seconds and neve开发者_开发技巧r times out. Is there a better way to do timeouts with fopen
?
If I use ini_set('default_socket_timeout',2)
above that code it times out properly but $info
then becomes null so ideally I'd like to use the stream functions.
You can use stream_context_create() and the http context option timeout
. But fopen()
will still return false if a timeout occurs, and stream_get_meta_data()
won't work.
$url = 'http://...';
$context = stream_context_create( array(
'http'=>array(
'timeout' => 2.0
)
));
$fp = fopen($url, 'r', false, $context);
if ( !$fp ) {
echo '!fopen';
}
else {
$info = stream_get_meta_data($fp);
var_dump($info);
}
精彩评论