2011-05-10 7 views
1

Je souhaite télécharger des images à partir d'une page Web, par exemple www.yahoo.com, et les stocker dans un dossier en utilisant PHP.Téléchargement de plusieurs images en utilisant PHP cURL

Je reçois la source de la page en utilisant file_get_contents() et en extrayant la balise img src. Je passe ce src au code cURL. Le code ne donne aucune erreur, mais les images ne sont pas téléchargées. S'il vous plaît vérifier le code. Je ne comprends pas où je vais mal.

<?php 
    $html = file_get_contents('www.yahoo.com'); 
    $ptn = '/< *img[^>]*src *= *["\']?([^"\']*)/i'; 
    preg_match_all($ptn, $html, $matches, PREG_PATTERN_ORDER); 
    $seq = 1; 
    foreach($matches as $img) 
    { 
     $fp = fopen("root/Images/image_$seq.jpg", 'wb'); 
     $ch = curl_init ($img); 
     curl_setopt($ch,CURLOPT_FILE, $fp); 
     curl_setopt($ch,CURLOPT_URL, $img); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
     $image = curl_exec($ch); 
     curl_close($ch); 
     fwrite($fp, $image); 
     fclose($fp); 
     $seq++; 
    } 
    echo "IMAGES DOWNLOADED"; 
?> 

Répondre

0
  • est $ img la URL complète de l'image?
  • L'image est-elle protégée (utilisez un referer)?

    $image = false; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_REFERER,$url); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 7); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch,CURLOPT_ENCODING,gzip); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
    $image = curl_exec ($ch); 
    

débogage Essayez d'abord.

Essayez d'abord avec une seule image de Yahoo, http://www.depers.nl/beeld/w100/2011/201105/20110510/anp/sport/img-100511-349.onlinebild.jpg.

De même, pourquoi utiliser file_get_contents et curl? Utilisez curl à la place.

  1. Créer une fonction pour cURL: function simple_curl ($url,$binary=false){ set your cURL vars, return curl_exec).
  2. Get yahoo.com: $result = simple_curl($url);
  3. Obtenir des liens avec le motif (vérifier si les correspondances contient l'URL complète (domaine + répertoire + fichier)
  4. boucle chaque match de motif (ne pas oublier. Tableau multi! ! donc boucle $matches[1])
  5. boucle fichier binaire et l'enregistrer. $image = simple_curl($match,true);
0
  • www.yahoo.com n'est pas une URL, http://www.yahoo.com/ est
  • .
  • $ img est un tableau dont vous avez besoin pour itérer $matches[1]
  • Vous demandez à cURL d'écrire dans un fichier et de récupérer le résultat. Utilisez-en un.

Je ne sais pas comment vous ne voyez pas d'erreurs. Je voudrais regarder dans cela. Copier et coller, puis l'exécuter m'a donné beaucoup d'erreurs.

1
foreach($matches as $img) 

devrait être remplacé

foreach($matches[1] as $img) 

BTW: vous devez remplacer les file_get_contents par cURL, il est environ 3 fois plus vite;)

Questions connexes