選項#1
而是選擇二進制/原始數據組合成的變量然後寫入,你可以使用CURLOPT_FILE
選項直接顯示一個文件到curl下載。
下面是函數:
// takes URL of image and Path for the image as parameter
function download_image1($image_url, $image_file){
$fp = fopen ($image_file, 'w+'); // open file handle
$ch = curl_init($image_url);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // enable if you want
curl_setopt($ch, CURLOPT_FILE, $fp); // output to file
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1000); // some large value to allow curl to run for a long time
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
// curl_setopt($ch, CURLOPT_VERBOSE, true); // Enable this line to see debug prints
curl_exec($ch);
curl_close($ch); // closing curl handle
fclose($fp); // closing file handle
}
這裏是你應該怎麼稱呼它:
// test the download function
download_image1("http://www.gravatar.com/avatar/10773ae6687b55736e171c038b4228d2", "local_image1.jpg");
選項#2
現在,如果你想下載非常大的文件,以上情況功能可能不會變得方便。您可以使用下面的函數來處理大文件。另外,如果需要,您可以打印進度(以%
或任何其他格式)。下面的功能是通過使用callback
函數來實現的,該函數將大塊數據寫入文件中,以進行下載。
// takes URL of image and Path for the image as parameter
function download_image2($image_url){
$ch = curl_init($image_url);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // enable if you want
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1000); // some large value to allow curl to run for a long time
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, "curl_callback");
// curl_setopt($ch, CURLOPT_VERBOSE, true); // Enable this line to see debug prints
curl_exec($ch);
curl_close($ch); // closing curl handle
}
/** callback function for curl */
function curl_callback($ch, $bytes){
global $fp;
$len = fwrite($fp, $bytes);
// if you want, you can use any progress printing here
return $len;
}
這裏是如何調用該函數:
// test the download function
$image_file = "local_image2.jpg";
$fp = fopen ($image_file, 'w+'); // open file handle
download_image2("http://www.gravatar.com/avatar/10773ae6687b55736e171c038b4228d2");
fclose($fp); // closing file handle
謝謝!我會繼續嘗試這件事情,看看它是否有效。 – David
請記住編碼良好的網站將查找用戶代理。每個瀏覽器,平板電腦或手機都會有一個用戶代理!如果您仍然無法獲取圖像,最有可能是因爲用戶代理檢測,請添加...'curl_setopt($ ch,CURLOPT_USERAGENT,'MyImage Collector + http://www.yourdomainname/mybot.html'); '或欺騙一個真正的'curl_setopt($ ch,CURLOPT_USERAGENT,'Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13)Gecko/20080311 Firefox/2.0.0.13');' – bbullis
像這樣保存圖像時是否有任何文件大小限制? PHP配置中的文件上傳限制是否會影響到這一點? – Foreever