2012-06-17 5 views
0

Je crée un service de découverte de flux rss en récupérant une URL de page et en recherchant les balises <link> dans l'en-tête de la page. Le problème est que certaines URL prennent vraiment beaucoup de temps à servir la source de la page, donc mon code reste très souvent bloqué à file_get_contents($url).file_get_contents accélération

Y at-il un moyen de le faire avec un délai d'attente prédéfini, par exemple si 10 secondes se sont écoulées et s'il n'y a toujours pas de contenu servi, il suffit de supprimer cette URL et passer à la suivante? Je pensais utiliser le paramètre maxLen pour obtenir seulement une partie de la source (<head>..</head>) mais je ne suis pas sûr si cela s'arrêterait réellement après que les octets reçus soient atteints nécessiterait le chargement complet de la page. L'autre problème avec cela est que je n'ai aucune idée de la valeur à définir ici car chaque page a un contenu différent dans le tag head donc les tailles varient.

Répondre

2

Je viens de lire à ce sujet, donc c'est la théorie que pour le moment .. mais ..

Ceci est la définition de la fonction, remarquez la partie contexte des ressources:

string file_get_contents (string $filename [, bool $use_include_path = false [, **resource $context** [, int $offset = -1 [, int $maxlen ]]]]) 

Si vous spécifiez le résultat d'une fonction stream_context_create() et transmettez la valeur du délai d'expiration dans le tableau d'options, cela peut fonctionner.

$context = stream_context_create($opts); 

Ou vous pouvez créer le flux et le mettre est directement délai d'attente:

http://www.php.net/manual/en/function.stream-set-timeout.php 

espère que vous avez un certain succès avec elle.

1

Utilisez le paramètre 'contexte'. Vous pouvez créer un contexte de flux à l'aide de la fonction 'stream_context_create' et spécifier dans le contexte http le délai souhaité.

$context = stream_context_create(array(
    'http' => array(
     'timeout' => YOUR_TIMEOUT, 
    ) 
)); 
$content = file_get_contents(SOME_FILE, false, $context); 

Plus d'informations: Here et also here.