PHP:访问链接时如何获取返回的链接

时间:2012-02-15 11:10:03

标签: facebook image hyperlink get

我有一个问题,我希望你们都会帮助我。我正在使用Wordpress。在我的国家,Facebook被禁止。所以我无法访问我的Facebook个人资料图片:

链接A:http://graph.facebook.com/100001225080368/picture - >和Facebook将链接B返回浏览器:

链接B:http://profile.ak.fbcdn.net/hprofile-ak-snc4/161159_100001225080368_1270343183_q.jpg

我的博客上有一个应用程序。它将连接到Facebook并获取所有数据(状态,图片,链接,如...),然后显示在我的博客上。问题是:可以显示文本数据,但不能显示个人资料图片。那是因为显示个人资料图片的代码是:

<img src="$fb_pic_id" />
我的PHP代码中的 $ fb_pic_id将返回链接A - &gt;这个链接有facebook域名和我的国家(Facebook被禁止),浏览器无法显示,默认情况下连接将在30秒后超时。

但如果我将链接B传递给“src”attr,将显示配置文件图片。但我不能在我的PHP代码中硬编码这个链接,因为当我(和其他用户)更改个人资料图片时,链接B将不会是真的。

所以我想问一下我们是否可以使用PHP代码来获取从链接A返回的链接B,之后,我将把LinkB设置为“src”attr以显示最新的Facebook个人资料图片ID。

谢谢,我希望你能帮助我:)。

1 个答案:

答案 0 :(得分:1)

Facebook正在使用Location标头进行HTTP重定向,因此获取图片的最终网址非常简单:

$url = 'http://graph.facebook.com/100001225080368/picture';

$ch = curl_init($url);
curl_setopt_array($ch, array(
  CURLOPT_FOLLOWLOCATION => false,
  CURLOPT_HEADER => true,
  CURLINFO_HEADER_OUT => true,
  CURLOPT_NOBODY => true,
  CURLOPT_RETURNTRANSFER => true
));

$headers = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($code == 302) {
  preg_match('/Location:(.*?)\n/', $headers, $matches);
  // NOTE: this will contain URL from `*.fbcdn.net`
  $directURL = trim(array_pop($matches));
} else {
  // NOTE: Previous code wasn't redirect by Facebook to original image
  // Do some fallback...
}