无法通过cURL检索和保存用户的显示图片

时间:2012-03-26 14:45:15

标签: php facebook facebook-graph-api curl

我正在尝试通过图形api检索用户显示图片并使用cUrl将其保存到磁盘中,但是在尝试检查我保存的图片的mime类型时无法成功并且出现此错误:

Notice: exif_imagetype(): Read error! in

//$userPpicture = $user_profile[picture];
//Create image instances
        $url = "http://graph.facebook.com/{$userId}/picture?type=large";
        $dpImage = 'temp/' . $userId . '_dpImage_' . rand().'.jpg';
        echo $dpImage;

        function get_data($url) {
            $ch = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }

        $returned_content = get_data($url);
        file_put_contents($dpImage, $returned_content);
        echo "Type: " . exif_imagetype($dpImage);

使用curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);获取此更新后的代码我收到此错误:

Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /var/fog/apps/app12345/myapp.phpfogapp.com/start.php on line 178

如果此操作需要任何服务器端配置,那么我可能无法执行此操作,因为我使用phpfog上的共享云存储。

请帮助我。

三江源。

2 个答案:

答案 0 :(得分:2)

您使用http://graph.facebook.com/4/picture?type=large的图表网址会返回HTTP 302重定向,而不是实际的用户图片。您需要按照重定向并在该网址下载图片,该网址是这样的网址:http://profile.ak.fbcdn.net/hprofile-ak-snc4/49942_4_1525300_n.jpg

答案 1 :(得分:1)

正如OffBySome指出的那样,您需要按照graph.facebook.com提供的302重定向到最终目的地,其中包含实际的图像数据。

在这种情况下,最简单的方法是使用CURLOPT_FOLLOWLOCATION添加另一个curl_setopt调用为true。即

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true)

查看http://us3.php.net/manual/en/function.curl-setopt.php了解详情。