$url = 'http://a.url/i-know-is-down';
//ini_set('default_socket_timeout', 5);
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 5,
'ignore_errors' => true
)
)
);
$start = microtime(true);
$content = @file_get_contents($url, false, $ctx);
$end = microtime(true);
echo $end - $start, "\n";
la respuesta que obtengo es generalmente de 21.232 segs, ¿no deberían ser unos cinco segundos?PHP file_get_contents ignorando el tiempo de espera?
Descomentar la línea ini_set no ayuda en absoluto.
Podrías tratar de apagar tanto la bandera "ignore_errors", así como los @file_get_contents silenciosas() llamada y ver si surge algún error obvio? –
@ Mahdi.M: No puedo desactivar 'ingnore_errors' porque necesito distinguir entre decir un error 404 y un error generado por problemas de conectividad. Déjame reformularlo. Si ingnore_errors' está desactivado y el servidor devuelve un contenido de $ 404, sería falso y necesito saber si $ contenido es falso debido a un error 404 o debido a un error de conectividad. El error que se muestra cuando suprimo @ el operador es genérico como 'file_get_contents (filename): no se pudo abrir la corriente' – Cesar
Como regla general, nunca debería necesitar usar @. Si es crítico para su aplicación, es probable que lo escriba de la manera incorrecta. ¡No siempre, pero muy a menudo! –