2010-06-07 5 views
0

Matin tout,En utilisant CURL dans une boucle pour télécharger un fichier, on travaille 1er, 2e fois sur

J'utilise curl pour télécharger un fichier image dans une boucle. La première fois, ça marche bien et je vois l'image apparaître dans le répertoire.

La deuxième fois, il échoue avec un délai d'attente, bien qu'il s'agisse d'une URL valide.

Quelqu'un peut-il suggérer pourquoi il échoue toujours à la deuxième fois et comment le réparer?

Le bout de code est:

// download image 

$extension = "gif"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_TIMEOUT, 90); 
curl_setopt($ch, CURLOPT_URL, $imgurl); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
echo $imgurl . " attempting to open URL "; 
$i = curl_exec($ch); 
if ($i==false) { 
    echo curl_errno($ch).' '.curl_error($ch); 
} 
$image_name=time().'.'.$extension; 
$f = fopen('/fulldirectorypath/' . $image_name ,'w+'); 
fwrite($f,$i); 
fclose($f); 

J'ai mis un écho là-bas pour afficher la imgURL de $, pour vérifier qu'il est valide, et fait monter le délai d'attente à 90 secondes, mais il échoue encore. Voilà ce que je vois à l'écran:

http://images.eu-xmedia.de/thumbnails/34555861/5676051/pt=pic,lang=2,origfile=yes/image.gif tentative d'ouverture URL 28 Opération a expiré après 90 secondes avec 0 octets reçus

un fichier vide est créé dans mon répertoire.

merci beaucoup,

Greg

Répondre

0

Si vous frappez le même site à plusieurs reprises, ils peuvent avoir quelque chose qui demande fois coming out trop vite. Si vous êtes en boucle, essayez d'ajouter un bref sleep après chaque itération.

Une chose que vous devriez probablement regarder à l'aide est multi-curl. Il exécute les opérations Curl en parallèle. La section Curl Functions on php.net les documente. Je suggère de regarder this tutorial. Quelqu'un là-bas a probablement écrit une abstraction orientée objet de curl et multi-curl.

+0

J'ai essayé un sommeil de 60 secondes, mais j'ai toujours le même problème ... – kitenski

0

Essayez d'ajouter curl_close($ch); après fclose($f);. Il me semble probable qu'il essaie de réutiliser la connexion, ce qui est en retour à l'origine du problème.

+0

Merci Joseph, je viens d'essayer mais je vois toujours le même problème. – kitenski

+0

Si vous exécutez une instance unique (au lieu d'une boucle), puis actualisez le navigateur dès qu'il est terminé, cela fonctionne-t-il alors? – Joseph

+0

Intéressant ... J'ai créé un petit fichier de test, avec un autre lien IMG cela fonctionne, avec celui identifié ci-dessus je reçois le même problème .... – kitenski

Questions connexes