Php 如何加载和保存用户的Facebook个人资料图片
我想直接链接用户的个人资料图片 我有以下代码Php 如何加载和保存用户的Facebook个人资料图片,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我想直接链接用户的个人资料图片 我有以下代码 $img = file_get_contents("https://graph.facebook.com/" . $fid . "/picture?type=large"); $file = dirname(__file__). "/" . $fid . ".jpg"; file_put_contents($file, $img); 但是https://graph.facebook.com/“$fid”。/picture?t
$img = file_get_contents("https://graph.facebook.com/" . $fid . "/picture?type=large");
$file = dirname(__file__). "/" . $fid . ".jpg";
file_put_contents($file, $img);
但是https://graph.facebook.com/“$fid”。/picture?type=large
具有重定向。如何遵循重定向?有没有办法通过文件获取内容来实现?我知道我可以通过curl
来完成,但似乎很复杂,因为safe_mode
打开了,我不知道如何关闭它
谢谢您您应该能够通过为文件获取内容提供第三个参数
$context
,来跟踪重定向,在该参数中,您可以将跟踪位置设置为1
(虽然这应该已经是默认值,并且在我的测试中,图像数据已经单独处理文件内容了。)您应该能够通过为文件内容提供第三个参数$context
来跟踪重定向,在该参数中,您将跟踪位置设置为1
(虽然这应该已经是默认值,并且在我的测试中,仅使用文件内容就可以获得图像数据。)她是我正在使用的代码,对我来说非常适合。它还将图片保存到我的服务器,这样我就有了一个本地url(然后可以将其发布回同一用户的个人资料或另一个用户/页面/事件/等的墙上),您所要做的就是将其放在代码中,其中$user有一个值,它应该可以正常工作
<?
$uid = $user;
function GetTheImage($linky) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $linky);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# ADDED LINE:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$userpicture = "http://graph.facebook.com/$uid/picture?type=large";
$sourceurl = GetTheImage($userpicture);
$save = fopen("/home/arose/public_html/mydomain.com/tmp/$uid-large.jpg", "w"); //this is name of new file that i save
fwrite($save, $sourceurl);
fclose($save);
?>
<html>
<head>
</head>
<body>
<img src="./tmp/<? echo $uid; ?>-large.jpg" />
</body>
</html>
-大型。jpg“/>
她是我正在使用的代码,它对我来说非常适合。它还将图片保存到我的服务器上,这样我就有了一个本地url(然后可以将其发布回同一用户的个人资料或另一用户的墙上/页面/事件/等等)您所要做的就是将它放在代码中,$user有一个值,它应该可以正常工作
<?
$uid = $user;
function GetTheImage($linky) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $linky);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# ADDED LINE:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$userpicture = "http://graph.facebook.com/$uid/picture?type=large";
$sourceurl = GetTheImage($userpicture);
$save = fopen("/home/arose/public_html/mydomain.com/tmp/$uid-large.jpg", "w"); //this is name of new file that i save
fwrite($save, $sourceurl);
fclose($save);
?>
<html>
<head>
</head>
<body>
<img src="./tmp/<? echo $uid; ?>-large.jpg" />
</body>
</html>
-大型。jpg“/>
Always I在使用$curl Follow Location时收到此警告:curl_setopt()[function.curl setopt]:当启用安全模式或设置了打开的\u basedir时,无法激活curl opt_Follow Location请参见此处问题的答案:Always I在使用$curl Follow Location时收到此警告:curl_setopt()[function.curl setopt]:CURLOPT_FOLLOWLOCATION在启用安全模式或设置open_basedir时无法激活请参见此处问题的答案:您可能需要禁用SSL检查。看到这个帖子了!您可能需要禁用SSL检查。看到这个帖子了!
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
function curl_redir_exec($ch)
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops++ >= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
@list($header, $data) = @explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302)
{
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . (@$url['query']?'?'.$url['query']:'');
return $new_url;
} else {
$curl_loops=0;
return $data;
}
}
function get_right_url($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
return curl_redir_exec($curl);
}
$url = 'http://graph.facebook.com/' . $fbid . '/picture?type=large';
$file_handler = fopen('img/avatar/'.$fbid.'.jpg', 'w');
$curl = curl_init(get_right_url($url));
curl_setopt($curl, CURLOPT_FILE, $file_handler);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_exec($curl);
curl_close($curl);
fclose($file_handler);