从 facebook 保存用户的个人资料图片 API - PHP SDK V.5
Saving User's Profile Picture from facebook API - PHP SDK V.5
场景: 我正在开发一个应用程序,我需要通过它从 Facebook 下载用户的个人资料图片,应用特定的过滤器,然后重新上传并将其设置为个人资料图片,使用这个技巧是可能的。 'makeprofile=1'
http://www.facebook.com/photo.php?pid=xyz&id=abc&makeprofile=1
问题:
所以我面临的问题是通过 API 从收到的 URL 下载图片。我是这样获取图片的URL:
$request = $this->fb->get('/me/picture?redirect=false&width=9999',$accessToken); // 9999 width for the desired size image
// return object as in array form
$pic = $request->getGraphObject()->asArray();
// Get the exact url
$pic = $pic['url'];
现在我想把从 URL 获得的图像保存到我服务器上的一个目录中,这样我就可以应用过滤器并重新上传它。
当我使用 file_get_contents($pic) 它抛出以下错误
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
我也尝试了一些其他方法,但无法解决此问题。任何帮助将不胜感激:)
注意:我现在通过 Codeigniter 和本地主机执行此操作。
所以我自己找到了解决方案并决定回答,这样可以帮助遇到同样问题的其他人。
我们需要将一些参数传递给 file_get_contents() 函数
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$profile_picture = @file_get_contents($profile_picture, false, stream_context_create($arrContextOptions));
// Use @ to silent the error if user doesn't have any profile picture uploaded
现在$profile_picture有图片了,我们可以通过以下方式保存到任意位置
$path = 'path/to/img'; //E.g assets/images/mypic.jpg
file_put_contents($path, $profile_picture);
就这些:-)
你可以使用file_get_connects()
$json = file_get_contents('https://graph.facebook.com/v2.5/'.$profileId.'/picture?type=large&redirect=false');
$picture = json_decode($json, true);
$img = $picture['data']['url'];
where $profileId variable contain user profile id and
type paramete can be square , large , small, normal according to your requirement which size you want
现在 $img
变量包含您的图像数据。使用 file_put_contents()
在服务器上保存图像文件
$imagePath = 'path/imgfolder'; //E.g assets/images/mypic.jpg
file_put_contents($imagePath, $img);
您的问题可能与 this question 重复。
我只想在这里重复 elitechief21's answer:您不应该禁用 SSL 证书,因为这会在您的应用程序中造成安全漏洞。
但是,您应该下载受信任的证书颁发机构 (CA) 列表(例如 curl.pem)并将其与您的 file_get_contents 一起使用,如下所示:
$arrContextOptions=array(
"ssl"=>array(
"cafile" => "/path/to/bundle/cacert.pem",
"verify_peer"=> true,
"verify_peer_name"=> true,
),
);
$profile_picture = @file_get_contents($picture_url, false, stream_context_create($arrContextOptions));
场景: 我正在开发一个应用程序,我需要通过它从 Facebook 下载用户的个人资料图片,应用特定的过滤器,然后重新上传并将其设置为个人资料图片,使用这个技巧是可能的。 'makeprofile=1'
http://www.facebook.com/photo.php?pid=xyz&id=abc&makeprofile=1
问题: 所以我面临的问题是通过 API 从收到的 URL 下载图片。我是这样获取图片的URL:
$request = $this->fb->get('/me/picture?redirect=false&width=9999',$accessToken); // 9999 width for the desired size image
// return object as in array form
$pic = $request->getGraphObject()->asArray();
// Get the exact url
$pic = $pic['url'];
现在我想把从 URL 获得的图像保存到我服务器上的一个目录中,这样我就可以应用过滤器并重新上传它。 当我使用 file_get_contents($pic) 它抛出以下错误
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
我也尝试了一些其他方法,但无法解决此问题。任何帮助将不胜感激:)
注意:我现在通过 Codeigniter 和本地主机执行此操作。
所以我自己找到了解决方案并决定回答,这样可以帮助遇到同样问题的其他人。
我们需要将一些参数传递给 file_get_contents() 函数
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$profile_picture = @file_get_contents($profile_picture, false, stream_context_create($arrContextOptions));
// Use @ to silent the error if user doesn't have any profile picture uploaded
现在$profile_picture有图片了,我们可以通过以下方式保存到任意位置
$path = 'path/to/img'; //E.g assets/images/mypic.jpg
file_put_contents($path, $profile_picture);
就这些:-)
你可以使用file_get_connects()
$json = file_get_contents('https://graph.facebook.com/v2.5/'.$profileId.'/picture?type=large&redirect=false');
$picture = json_decode($json, true);
$img = $picture['data']['url'];
where $profileId variable contain user profile id and type paramete can be square , large , small, normal according to your requirement which size you want
现在 $img
变量包含您的图像数据。使用 file_put_contents()
$imagePath = 'path/imgfolder'; //E.g assets/images/mypic.jpg
file_put_contents($imagePath, $img);
您的问题可能与 this question 重复。
我只想在这里重复 elitechief21's answer:您不应该禁用 SSL 证书,因为这会在您的应用程序中造成安全漏洞。
但是,您应该下载受信任的证书颁发机构 (CA) 列表(例如 curl.pem)并将其与您的 file_get_contents 一起使用,如下所示:
$arrContextOptions=array(
"ssl"=>array(
"cafile" => "/path/to/bundle/cacert.pem",
"verify_peer"=> true,
"verify_peer_name"=> true,
),
);
$profile_picture = @file_get_contents($picture_url, false, stream_context_create($arrContextOptions));