2010-09-08 10 views
1

Je rencontre des problèmes avec cURL ne pas être en mesure de se connecter à un serveur qui retourne un flux xml et ne suis pas sûr si mon code empile et provoque le problème. Est-il possible que la fonction finale appelée dans cette boucle foreach soit toujours en cours d'exécution lorsque l'itération de la boucle suivante arrive.PHP pile foreach - est-il possible que les fonctions appelées dans chaque boucle sont toujours en cours d'exécution lors de la prochaine itération est appelée

Est-il possible de vous assurer que toutes les fonctions dans la boucle complète avant la prochaine itération commence ou ne foreach cette opération par défaut de toute façon? J'ai essayé la fixation d'un vrai retour sur process_xml() et exécution d'un test dans la boucle: if ($ this-> process_xml (xml_array de $)) continue; mais il ne semble pas avoir un effet et semble être une mauvaise idée de toute façon.

foreach($arrayOfUrls as $url){ 

    //retrieve xml from url as string. 
    if($url_xml_string = $this->getFeedStringUsing_cURL($url)){ 
     $xml_object = simplexml_load_string($url_xml_string); 
     $xml_array = $this->feedStringToArray($xml_object); 
     //process the xml. 
     $this->process_xml($xml_array); 
    }         
} 
+1

Cela dépend si oui ou non tous les appels de fonction dans la boucle sont synchrones. –

Répondre

1

Non, ce n'est pas possible. Chaque instruction est exécutée et terminée avant l'exécution de l'instruction suivante.

0

et je ne sais pas si mon code est empiler

Je ne sais pas? Si c'est important pour toi, pourquoi ne le découvres-tu pas? Sans savoir quel système d'exploitation vous utilisez, il est plutôt difficile de vous conseiller sur la façon de procéder - mais netstat pourrait être un bon point de départ.

Est-il possible la fonction finale appelée dans cette boucle de foreach est toujours en cours d'exécution

Il est hautement improbable - scripts PHP fonctionnent dans un seul thread d'exécution, sauf si vous leur dites de ne pas - mais l'extension boucle vous permet de définir les callbacks dans votre code php qui exécutent avant que l'opération est terminée, et la famille curl_multi_ des fonctions vous permettent également d'exécuter du code php alors que les demandes sont en cours.