txt test read que print file_get_contents content all php timeout file-get-contents

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);