У меня есть следующий отрывок кода php
if($fp = fopen($url, 'r')) {
stream_set_timeout($fp, 1);
stream_set_blocking($fp, 0);
}
$info = stream_get_meta_data($fp);
Я хотел бы запрос к тайм-ауту после 1 секунды. Если я поместил a sleep(20)
в моем $url
то, что я читаю, это просто ожидает целые 20 секунд и никогда не испытывает таймаут. Есть ли лучший способ сделать тайм-ауты с fopen
?
Если я использую ini_set('default_socket_timeout',2)
выше того кода это испытывает таймаут правильно, но $info
затем становится пустым так идеально, я хотел бы использовать функции потока.
Вы можете использовать stream_context_create () и параметр контекста http тайм-аут
. Но fopen ()
все равно вернет false, если произойдет тайм-аут, а stream_get_meta_data ()
не будет работать.
$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);
}