Estoy llamando a una serie de enlaces usando el file_get_contents()
método en un bucle. Cada enlace puede tardar más de 15 minutos en procesarse. Ahora, me preocupa si PHP 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 que finalice el anterior.
Entonces, por favor dígame si file_get_contents()
tiene un tiempo de espera. El archivo que contiene file_get_contents()
se establece set_time_limit()
en cero (ilimitado).
php
timeout
file-get-contents
Flora Clinton
fuente
fuente
Respuestas:
El tiempo de espera predeterminado se define mediante
default_socket_timeout
la configuración inicial , que es de 60 segundos. También puedes cambiarlo sobre la marcha:Otra forma de establecer un tiempo de espera sería utilizarlo
stream_context_create
para establecer el tiempo de espera como opciones de contexto HTTP del envoltorio de flujo HTTP en uso:fuente
Como mencionó @diyism, " default_socket_timeout, stream_set_timeout y stream_context_create timeout son todos los tiempos de espera de cada línea de lectura / escritura, no todo el tiempo de conexión " . Y la respuesta principal de @stewe me ha fallado.
Como alternativa al uso
file_get_contents
, siempre puede usarcurl
con un tiempo de espera.Así que aquí hay un código de trabajo que funciona para llamar a enlaces.
fuente
fsockopen
lugar decurl
): stackoverflow.com/a/3690321/1869825¡Si! Al pasar un contexto de flujo en el tercer parámetro:
Aquí con un tiempo de espera de 1s :
Fuente en la sección de comentarios de https://www.php.net/manual/en/function.file-get-contents.php
Opciones de contexto HTTP :
Otros contextos: https://www.php.net/manual/en/context.php
fuente
stream_context_create
solo funciona para el tiempo de espera de conexión. Si el servidor responde (envía algunos datos) dentro del tiempo de espera determinado, pero tarda una eternidad en enviar el resto de su carga útil, este tiempo de espera no interrumpe la transferencia lenta.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 file_get_contents :
fuente
Para mí trabajo cuando cambio mi php.ini en mi host:
fuente