2017-02-09 3 views
0

Ich erstelle benutzerdefinierte Funktionalität, um eine Liste von Bildern auf meinem Server von ihrer URL zu importieren. Das Problem ist, einige Bilder werden kopiert und einige Bilder Dateigröße ist 0B. Wenn ich diese Bild-URL im Browser öffne, zeigt sie mir das korrekte Bild an.Wie kann ich Bilder von Url herunterladen und kopieren?

I Kopierfunktion bin mit Bild kopieren:

copy($img, DIR_IMAGE.'catalog/'.$filename); 

Wo img $ enthält HTTP-URL des Bildes und $ filename Basisnamen des Bildes enthalten.

Ich habe auch versucht, eine andere alternative:

  $file = fopen ($img, "rb"); 
      if ($file) 
      { 
       $newf = fopen (DIR_IMAGE.'catalog/'.$filename, "wb"); 

       if ($newf) 
       while(!feof($file)) 
       { 
        fwrite($newf, fread($file, 1024 * 8), 1024 * 8); 
       } 
      } 
      if ($file) 
      { 
       fclose($file); 
      } 

      if ($newf) 
      { 
       fclose($newf); 
      } 

Kann mir jemand empfehlen, wie Sie dieses Problem zu beheben.

Vielen Dank im Voraus.

+0

Die 0B sind konsistent für eine Gruppe von Bildern oder ist es zufällig? Können Sie einige Bilder zur Verfügung stellen, wo es Bilder mit 0 Längen bekommt? – emiliopedrollo

+0

Was kann passieren, ist, dass einige Websites Hotlink-Schutz für ihre Bilder bieten, aber ich brauche mehr Informationen zu confim. – emiliopedrollo

+0

Ich behalte alle Bilder von derselben Seite. Wenn ich ein Bild mit dem obigen Code kopieren kann, warum nicht anderes? –

Antwort

0

Es kann Bild hotlink Schutz sein, wenn es der Fall ist es eine etwas komplexere Entscheidung machen müssen, um dieses Bild zum Download:

$ch = curl_init(); 
$fp = fopen(DIR_IMAGE.'catalog/'.$filename, "w"); 
curl_setopt($ch, CURLOPT_URL, $img); 
curl_setopt($ch, CURLOPT_MUTE, TRUE); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0"); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/c"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/c"); 
curl_setopt($ch, CURLOPT_REFERER, "http://".$imgDomain."/"); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0"); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

Sie werden auch die Domain wissen müssen, um auf mit der Auf das Image kann zugegriffen werden (es kann dasselbe sein oder nicht, wie es gehostet wird) und es als Referer Header (wie oben) bereitstellen.

+0

$ imgDomain ist der Domain Name, von dem ich das Image kopiere –

+0

Ja, sollte es sein. Der Referer soll die Adresse sein, von der aus die Anfrage gemacht wurde (irgendwo mit der Erlaubnis, das Bild zu sehen) – emiliopedrollo

+0

Ich habe obige Lösung versucht, aber es kopiert immer noch keine Bilder .. :( –

Verwandte Themen