Для этой цели я использовал два метода, но ни один из них не работает.Для метода 1 я скачал три файла:
- base_facebook.php
- facebook.php
- fb_ca_chain_bundle.crt
Метод 1
include ('facebook.php');
$facebook = new facebook('API','SECRET');
$fbid = $facebook->getUser();
echo $fbid; // when i echo this it always show 0; even the followers are logedin or logedout
echo "<div class='' id=\"user-icon\"><img src=\"'https://graph.facebook.com/{'.$fbid.'}/picture{?type=small}'\" /></div>";
Метод 2
class sfFacebookPhoto{
private $useragent = 'Loximi sfFacebookPhoto PHP5 (curl)';
private $curl = null;
private $response_meta_info = array();
private $header = array(
"Accept-Encoding: gzip,deflate",
"Accept-Charset: utf-8;q=0.7,*;q=0.7",
"Connection: close"
);
public function __construct() {
$this->curl = curl_init();
register_shutdown_function(array($this, 'shutdown'));
}
/**
* Get the real url for picture to use after
*/
public function getRealUrl($photoLink) {
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($this->curl, CURLOPT_HEADER, false);
curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($this->curl, CURLOPT_URL, $photoLink);
// curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true);
//this assumes your code is into a class method, and uses $this->readHeader as the callback //function
curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array(&$this, 'readHeader'));
$response = curl_exec($this->curl);
if (!curl_errno($this->curl)) {
$info = curl_getinfo($this->curl);
var_dump($info);
if ($info["http_code"] == 302) {
$headers = $this->getHeaders();
if (isset($headers['fileUrl'])) {
return $headers['fileUrl'];
}
}
}
return false;
}
/**
* Download facebook user photo
*
*/
public function download($fileName) {
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->curl, CURLOPT_HEADER, false);
curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($this->curl, CURLOPT_URL, $fileName);
curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($this->curl);
$return = false;
if (!curl_errno($this->curl)) {
$parts = explode('.', $fileName);
$ext = array_pop($parts);
$return = sfConfig::get('sf_upload_dir') . '/tmp/' . uniqid('fbphoto') . '.' . $ext;
file_put_contents($return, $response);
}
return $return;
}
/**
* CURL callback function for reading and processing headers
* Override this for your needs
*
* @param object $ch
* @param string $header
* @return integer
*/
private function readHeader($ch, $header) {
//extracting example data: filename from header field Content-Disposition
$filename = $this->extractCustomHeader('Location: ', '\n', $header);
if ($filename) {
$this->response_meta_info['fileUrl'] = trim($filename);
}
return strlen($header);
}
private function extractCustomHeader($start, $end, $header) {
$pattern = '/' . $start . '(.*?)' . $end . '/';
if (preg_match($pattern, $header, $result)) {
return $result[1];
} else {
return false;
}
}
public function getHeaders() {
return $this->response_meta_info;
}
/**
* Cleanup resources
*/
public function shutdown() {
if ($this->curl) {
curl_close($this->curl);
}
}
}
Я сохранил вышеуказанный класс как curl.php.
require_once 'curl.php';
$photo="https://graph.facebook.com/me/picture?access_token=".$session['access_token'];
$sample = new sfFacebookPhoto;
$thephotoURL=$sample->getRealUrl($photo);
echo $thephotoURL;
// but here echo is not showing anything no-error, no-exception, no-output.
echo "<div id=\"user-icon\"><img src=\"$thephotoURL\" /></div>";
Как видите, я хочу отображать изображения пользователей Facebook в моих комментариях.Как и в Wordpress или Joomla, когда пользователь Facebook комментирует, его изображение профиля Facebook отображается с комментариями.Мой сайт не использует Wordpress или Joomla.Он основан на PHP, я создал его сам.Я использовал код Avatars, который работает нормально, если кто-то из пользователей Wordpress комментирует мой сайт.Его / ее изображение показывает, но не пользователя Facebook.
Я использую этот код для аватаров Wordpress, который работает нормально:
$hash = md5( strtolower( trim( $row['email'] ) ) );
$default_usr = urlencode( 'http://www.kingofdevelopers.com/images/user-icon.png');
echo "<div class='default-user' id=\"user-icon\"><img src=\"http://www.gravatar.com/avatar /$hash.'.jpg?s=45&d=$default_usr'\" /></div>";