2012-11-28 3 views
5

Donc, j'essaie d'obtenir le fichier xml avec curl à partir de l'URL. Chose est, le fichier est généré à la demande via un script, ce qui prend jusqu'à 80-100 secondes et donc mon curl est tombé avec erreur de timeout.Curl timeout lors du téléchargement de xml

url ressemble à quelque chose comme ceci:

https://domain/mancgi/report?params&out=xml 

J'ai essayé de mettre CURLOPT_TIMEOUT et CURLOPT_CONNECTTIMEOUT, et aussi set_time_limit() pour lui-même scénario (qui fonctionne très bien), mais rien n'a changé - toujours temps mort.

Code Curl ressemble à ceci:

set_time_limit(1000); 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($curl, CURLOPT_TIMEOUT, 300); 
$xml = curl_exec($curl); 

quelqu'un a des idées?

+0

Vous avez besoin d'augmenter la limite d'exécution de temps de script de configuration du serveur. –

+0

Quel genre de timeout obtenez-vous et comment le savez-vous? Fournir des détails s'il vous plaît – Ranty

+0

Le temps d'exécution est remplacé par set_time_limit() en fonction de phpinfo(), mais même si ce n'est pas le cas - par défaut, il est fixé à 180 secondes, ce qui est suffisant. – user976258

Répondre

1

Je crois que vous pouvez frapper le default_socket_timeout dans le php.ini qui est de 60 secondes par défaut.

Essayez de changer et de voir si cela fonctionne. Sinon, essayez ceci à la place.

$xml = file_get_contents($url); 

Faire cela utilisera des enveloppes que vous pouvez lire ici: http://php.net/manual/en/wrappers.php

Et vous devez également veiller à ce que les emballages nécessaires pour une utilisation par file_get_contents sont activés dans php.ini (qui permettent en général donc ça devrait aller, mais vérifiez pour vous assurer).

L'utilisation qui peut contourner le délai d'attente que vous rencontrez si le délai d'attente est appliquée par CURL et souvenez-vous de régler la default_socket_timeout dans php.ini de 60 SECONDES à autre chose que je crois peut-être votre problème

L'INI pour vérifier les paramètres

http://php.net/manual/en/filesystem.configuration.php

+0

@ user1834735, @VBAssassin Désolé, vouliez-vous dire 'file_get_contents()'? Parce que je ne connais aucune fonction du nom de 'get_file_content()' et mon Google ne les connaît pas non plus. Et 'file_get_contents()' ne fera pas l'affaire. Après plusieurs heures de brainstorming avec la plupart du bureau, nous sommes arrivés à la conclusion que ce problème est une combinaison rare de configuration Apache, de directives php.ini et de malchance, donc nous allons avec Pearl cette fois et je suis en train de fermer la question. Mais merci à vous tous pour votre temps de toute façon, vous avez tous été vraiment utile. – user976258

+0

Perle? Tu veux dire Perl? ;) corrigé la faute de frappe. "Après plusieurs heures de brainstorming avec la plupart du bureau" Vraiment?Sur quelque chose comme ça? :/Est-ce qu'il n'y a pas de développeur senior PHP en tant que senior devrait avoir connu tous les endroits pour rechercher ce genre de problème. Bonne chance :) – VBAssassin

+0

Ouais, Perl, mah mauvais. Et oui, vraiment, sur quelque chose comme ça. Tout d'abord, nous n'avons pas de développeur PHP senior - VRAIMENT - et d'autre part, c'était une journée très ennuyeuse donc c'était une sorte d'animation pour nous tous :) Merci quand même, bonne chance à vous aussi. – user976258

0

L'URL est-elle une demande GET? Si alors essayez

$xml = get_file_content($url); 
+0

Il n'y a pas une telle fonction dans php – Piero

Questions connexes