php - test - print file_get_contents
¿File_get_contents() tiene una configuración de tiempo de espera? (4)
Estoy llamando a una serie de enlaces utilizando el método file_get_contents()
en un bucle. Cada enlace puede tardar más de 15 minutos en procesarse. Ahora, me preocupa si file_get_contents()
tiene un período de tiempo de espera?
En caso afirmativo, finalizará con una llamada y pasará al siguiente enlace. No quiero llamar al siguiente enlace sin el anterior.
Por lo tanto, dígame si file_get_contents()
tiene un período de tiempo de espera. El archivo que contiene file_get_contents()
se establece en set_time_limit()
en cero (ilimitado).
Como @diyism mencionó, " default_socket_timeout, stream_set_timeout y stream_context_create timeout son todo el tiempo de espera de cada línea de lectura / escritura, no el tiempo de espera completo de la conexión. " Y la respuesta superior de @stewe me ha fallado.
Como alternativa al uso de file_get_contents
, siempre puede usar curl
con un tiempo de espera excedido.
Así que aquí hay un código de trabajo que funciona para llamar enlaces.
$url=''http://example.com/'';
$ch=curl_init();
$timeout=5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$result=curl_exec($ch);
curl_close($ch);
echo $result;
El tiempo de espera predeterminado está definido por default_socket_timeout
ini-setting , que es de 60 segundos. También puede cambiarlo sobre la marcha:
ini_set(''default_socket_timeout'', 900); // 900 Seconds = 15 Minutes
Otra forma de establecer un tiempo de espera sería usar stream_context_create
para establecer el tiempo de espera como opciones de contexto HTTP de la envoltura de flujo HTTP en uso:
$ctx = stream_context_create(array(''http''=>
array(
''timeout'' => 1200, //1200 Seconds is 20 Minutes
)
));
echo file_get_contents(''http://example.com/'', false, $ctx);
Para mí, trabajo cuando cambio mi php.ini en mi host:
; Default timeout for socket based streams (seconds)
default_socket_timeout = 300
Vale la pena señalar que si cambia default_socket_timeout sobre la marcha, podría ser útil restaurar su valor después de su llamada a file_get_contents :
$default_socket_timeout = ini_get(''default_socket_timeout'');
....
ini_set(''default_socket_timeout'', 10);
file_get_contents($url);
...
ini_set(''default_socket_timeout'', $default_socket_timeout);