Question

Je travaille avec PHP pour accéder aux fichiers et aux photos à partir de serveurs distants. J'utilise principalement les fonctions file_get_contents () et copy ().

Parfois, l'accès à un petit fichier texte ou à une photo est presque instantané, mais d'autres fois, il semble rester "bloqué". pendant une minute sur le même fichier exact. Et parfois, mon script se bloque parfois et même lorsque j’arrête le script, Apache reste verrouillé pendant plusieurs minutes.

Je suis tout à fait disposé à accepter le fait que les connexions Internet peuvent être instables. Mon souci est que je récupère gracieusement et que je ne plante pas Apache - la fonction PHP set_time_limit () ne renvoie qu'une erreur fatale. De plus, il existe une note dans le manuel PHP indiquant que le temps passé sur les opérations de flux ne contribue pas à la durée d'exécution du script.

Comment puis-je récupérer de tels problèmes de connexion et permettre à mon script de continuer? Et pourquoi cela ferait-il plier Apache?

Merci, Brian

Était-ce utile?

La solution

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

Consultez stream_context_create et Options de contexte HTTP . Le code ci-dessus définira un délai d’expiration sur la connexion et autorisera une redirection.

Cela devrait empêcher d’atteindre le délai d’expiration.

Les longs retards peuvent être causés par le réseau ou par le serveur distant doté d’un pare-feu vous empêchant de saisir trop de fichiers à la fois, ou par un serveur ou un serveur DNS instable sur le chemin de l’hôte distant. A titre de suggestion, vous devez mettre en cache localement les fichiers téléchargés. Ainsi, lors de la prochaine actualisation, les fichiers seront gérés localement au lieu du réseau étendu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top