2011-02-18 56 views
4

如何從curl(https站點)下載圖像?使用curl從SSL下載圖像?

文件保存在我的電腦上,但它爲什麼是空白(0KB)?

function save_image($img,$fullpath){ 
    $ch = curl_init ($img); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
    $rawdata=curl_exec($ch); 
    curl_close ($ch); 

    $fp = fopen($fullpath,'w'); 
    fwrite($fp, $rawdata); 
    fclose($fp); 
} 

save_image("https://domain.com/file.jpg","image.jpg"); 

回答

5
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 

實際上應該是:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

使捲曲知道它應該返回的數據,並沒有迴應它。

此外,有時你必須做更多的工作來獲得由捲曲接受的SSL證書:
Using cURL in PHP to access HTTPS (SSL/TLS) protected sites

編輯:

考慮您的使用情況,您還應該設置CURLOPT_HEADER爲false作爲阿利克斯阿克塞爾推薦。

在SSL方面,我希望您花些時間閱讀我建議的鏈接,因爲有幾種不同的方式來處理SSL,如果數據不敏感,推薦的修復Alix可能會正常,但是否定了安全性,因爲它迫使CURL接受任何服務器證書。

3

您需要添加這些選項:

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

此外,設置CURLOPT_HEADERfalseCURLOPT_RETURNTRANSFERtrue

+0

爲什麼downvote? – 2011-03-30 17:59:15

+0

因爲這是一種可怕的方法,所以要忽略SSL警告。這是不安全的,不能這樣做。相反,你應該設置證書並下載,強制SSL(如果可用) - 始終。 – 2015-03-18 10:41:06