2017-02-09 102 views
0

我正在創建自定義功能,以從他們的URL中導入服務器上的圖像列表。問題是一些圖像被複制,一些圖像文件大小爲0B。如果我在瀏覽器中打開該圖像網址,它會向我顯示正確的圖像。如何從Url下載和複製圖片?

我使用複製功能來複製圖像:

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

其中$ IMG包含的圖像和$文件名包含圖像的基本名稱HTTP URL。

我也嘗試另一個備選:

  $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); 
      } 

任何人都可以建議我如何解決這個問題。

在此先感謝。

+0

0B對於一組圖像是否一致或者是隨機的?你能提供一些圖像,它獲得0長度的圖像? – emiliopedrollo

+0

可能發生的事情是,某些網站爲他們的圖像提供熱鏈接保護,但我需要更多信息來進行查封。 – emiliopedrollo

+0

我正在處理來自同一站點的所有圖像。如果我可以使用上面的代碼複製一個圖像,那麼爲什麼不其他? –

回答

0

可能像防盜鏈,如果是這種情況,你必須做一個稍微複雜的呼叫下載圖片:

$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); 

你還需要知道與域圖像可以被訪問(可以或不可以與其託管的圖像相同),並將其作爲參考標題(如上所述)提供。

+0

$ imgDomain是從哪裏複製圖像的域名 –

+0

是的,應該是。推薦人是假設是從請求內的地址(有權查看圖片的地方) – emiliopedrollo

+0

我試過上面的解決方案,但它仍然沒有複製一些圖像.. :( –