Как правильно получить fopen to timeout

Привет всем, у меня есть следующий фрагмент кода php

if($fp = fopen($url, 'r')) { stream_set_timeout($fp, 1); stream_set_blocking($fp, 0); } $info = stream_get_meta_data($fp); 

Я бы хотел, чтобы запрос на тайм-аут через 1 секунду … если я поставлю сон (20) в своем $ url, который я читаю, он просто ждет целых 20 секунд и никогда не выйдет из игры. Есть ли лучший способ сделать тайм-ауты с fopen?

Если я использую ini_set ('default_socket_timeout', 2); выше этого кода он иссякает должным образом, но $ info затем становится нулевым, поэтому я бы хотел использовать функции потока.

благодаря

Solutions Collecting From Web of "Как правильно получить fopen to timeout"

Вы можете использовать stream_context_create () и timeout параметра http context
Но 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); }