PHP: Как получить возвращенную ссылку при доступе к ссылке - PullRequest
0 голосов
/ 15 февраля 2012

У меня проблема, и я надеюсь, что вы все мне поможете. Я использую 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" />

$ fb_pic_id в моем php-коде вернет ссылку A -> в этой ссылке есть домен facebook, и в моей стране (Facebook заблокирован) браузер не может отображаться, и по умолчанию время подключения истекает через 30 с.

Но если я передам ссылку B на атрибут "src", изображение профиля будет отображаться. Но я не могу жестко закодировать эту ссылку в своем php-коде, потому что, когда я (и другие пользователи) меняю картинку профиля, Ссылка B не будет верной.

Поэтому я хочу спросить, можем ли мы использовать PHP-код для получения ссылки B, которая вернулась из ссылки A, и после этого я установлю для LinkB значение «src» attr для отображения новейшего идентификатора изображения профиля в Facebook.

Спасибо, и я надеюсь, что вы мне поможете:)

1 Ответ

1 голос
/ 15 февраля 2012

Facebook использует перенаправление HTTP, используя заголовок Location, поэтому довольно просто получить окончательный URL-адрес изображения:

$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...
}
...