2011-08-26 11 views
2

我需要將用戶圖像作爲PHP中的圖像對象。
最明顯的選擇將是做到以下幾點:在PHP中通過curl獲取用戶個人資料圖像不起作用

$url = 'https://graph.facebook.com/'.$fb_id.'/picture?type=large'; 
$img = imagecreatefromjpeg($url); 

這工作我測試服務器上,而不是在服務器上運行此腳本應該最終運行(allow_url_fopen已被關閉,那裏)。

所以,我想通過捲曲獲得的圖像:

function LoadJpeg($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
    $fileContents = curl_exec($ch); 
    curl_close($ch); 
    $img = imagecreatefromstring($fileContents); 

    return $img; 
} 

$url = 'https://graph.facebook.com/'.$fb_id.'/picture?type=large'; 
$img = LoadJpeg($url); 

然而,這不符合Facebook的個人資料圖片工作
例如,使用捲曲從google.com加載Google Googles徽標完美。

有人可以告訴我爲什麼或告訴我如何實現我想要做的?

回答

1
  1. 最簡單的辦法:打開allow_url_fopen
  2. 的Facebook最有可能符合你的用戶代理。

欺騙它像...

// spoofing Chrome 
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, wie z. B. Gecko) Chrome/13.0.782.215 Safari/525.13."; 

$ch = curl_init(); 

// set user agent 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
// set the rest of your cURL options here 

我沒有提這侵犯了他們的服務條款,並可能導致法律問題,對不對?另外,請確保你按照他們的robots.txt

+0

感謝您的回答,但設置用戶代理並不能解決問題。 關於TOS:我正在編寫一個應用程序,可以爲正在使用它的用戶使用用戶配置文件圖像。我在這裏看不到問題 - 或者我錯過了什麼? –

+0

我也嘗試通過設置除用戶代理以外的其他頭字段來模擬普通的瀏覽器調用,但沒有運氣。 真正令我困惑的是imagecreatefromjpeg不會遇到任何這些問題;它只是檢索圖像。 –

3

你必須設置

curl_setopt($ CH,CURLOPT_FOLLOWLOCATION,真正的);

通過這種方式,您可以在沒有它的情況下找到圖像 ,因爲在響應標頭的字段「url」中設置了另一個位置,您將得到一個沒有圖像的302響應代碼。

相關問題