2011-08-26 57 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响应代码。

相关问题