2013-03-13 99 views
1

我需要保存來自遠程站點的圖像。我的主機不允許file_get_contents,所以我想用curl。我正在使用代碼獲取corrput圖像。請幫忙!以PHP格式保存來自遠程服務器的圖像

$destination = realpath("../../app/webroot/img/uploads") . "/" . $facebook_id . "." . "gif"; 

    // Delete previous pic 
    if (file_exists($destination)) { 
     unlink($destination); 
    } 

    // Save new pic 
    $remoteUrl = "https://graph.facebook.com/" . $facebook_id . "/picture"; 

    $ch = curl_init($remoteUrl); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
    $rawdata = curl_exec($ch); 
    curl_close($ch); 
    $fp = fopen($destination, 'w'); 
    fwrite($fp, $rawdata); 
    fclose($fp); 
+0

你看着這個被破壞的數據?這是一個局部圖像? 0長度的文件?你有沒有檢查'$ rawdata'是否真的是一個布爾錯誤來表示curl以某種方式失敗? – 2013-03-13 21:44:57

+0

從未與Facebook合作過,是否有可能阻止你如何? – 2013-03-13 21:51:33

+0

@MarcB $ rawdata爲空 – user1871640 2013-03-13 21:53:00

回答

1

$fp = fopen($destination, 'wb');

相反,打開它們作爲二進制文件! :)

+0

用wb試過,當我打開圖像時顯示'圖像無法打開它包含錯誤' – user1871640 2013-03-13 21:49:33

+0

設置CURLOPT_READFUNCTION或CURLOPT_WRITEDATA也許? – 2013-03-13 21:53:14

1

看來您的服務器正在將graph.facebook.com解析爲由於某種原因未連接的IPv6地址。如果你在PHP5.3 +,你可以嘗試強制捲曲使用IPv4:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

+0

+1也在考慮這一點,根據OP發佈的錯誤 – thaJeztah 2013-03-15 22:29:54