2010-03-24 10 views
5

Hola a todos, tengo el siguiente fragmento de código phpComo llegar a tiempo de espera FOPEN adecuadamente

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

} 
$info = stream_get_meta_data($fp); 

me gustaría la solicitud de tiempo de espera después de 1 segundo ... si pongo un sueño (20) en mi $ url que estoy leyendo solo espera los 20 segundos completos y nunca se agota. ¿Hay una mejor manera de hacer tiempos de espera con fopen?

Si uso ini_set ('default_socket_timeout', 2); encima de ese código, se agota el tiempo de espera, pero $ info se vuelve nulo, así que idealmente me gustaría usar las funciones de transmisión.

gracias

+0

¿Qué espera $ información cuando hay un tiempo de espera de conexión? – VolkerK

Respuesta

10

Puede utilizar stream_context_create() y la http context option timeout
Pero fopen() todavía devolver false si se produce un tiempo de espera y stream_get_meta_data() no funcionará.

$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); 
} 
+0

el único problema es que los contextos no se agregaron hasta que php5 y el código que estoy escribiendo desafortunadamente necesita ser compatible con php4 :( – James

+1

El manual dice PHP 4.3.0 por lo que debe estar listo, http: //www.php.net/manual/en/function.stream-context-create.php –

+1

Acabo de probar "timeout", pero cuando elijo timeout = 2, en realidad tardo 4 segundos en timeout, si timeout = 15 , en realidad, tome 30 segundos para agotar el tiempo de espera. ¿Por qué? – TomSawyer