Manejando demoras al recuperar archivos del servidor remoto en PHP

Estoy trabajando con PHP para acceder a archivos y fotos desde servidores remotos. Estoy usando principalmente las funciones file_get_contents () y copy ().

A veces, el acceso a un pequeño archivo de texto o fotografía es casi instantáneo, pero otras veces parece “atascado” durante un minuto en el mismo archivo exacto. Y a veces hace que mi script se cuelgue, e incluso cuando detengo el script, Apache permanece bloqueado durante varios minutos.

Estoy dispuesto a aceptar el hecho de que las conexiones a Internet pueden ser escamosas. Mi preocupación es que me recupere con elegancia y que no bloquee Apache: la función PHP set_time_limit () solo devuelve un error fatal. Además, hay una nota en el manual de PHP que indica que el tiempo dedicado a las operaciones de flujo no contribuye al tiempo de ejecución del script.

¿Cómo puedo recuperarme de esos problemas de conexión y permitir que mi script continúe? ¿Y por qué esto estaría causando que apache se cuelgue?

Gracias, Brian

$options = array( 'http' => array( 'user_agent' => 'Firefox wannabe', 'max_redirects' => 1, 'timeout' => 10, ) ); $context = stream_context_create( $options ); $content = file_get_contents( $url, false, $context ); 

Eche un vistazo a stream_context_create y HTTP Context Options . El código anterior establecerá un tiempo de espera en la conexión y permitirá una redirección.

Esto debería evitar alcanzar el tiempo de espera.

Las largas demoras pueden ser causadas por la red o por el servidor remoto que tiene un servidor de seguridad que le niega la posibilidad de capturar demasiados archivos a la vez o por un servidor DNS o enrutador en la ruta al host remoto. Como sugerencia, debe almacenar en caché localmente los archivos descargados, de modo que en los próximos archivos de actualización se manejarán localmente en lugar de la gran red.