길이 이야기(Giri's Story)

[소셜(SNS)댓글] facebook 연동 FAQ #2 - file_get_contents() 함수문제 본문

IT기술,개발/웹프로그래밍

[소셜(SNS)댓글] facebook 연동 FAQ #2 - file_get_contents() 함수문제

길이 2011. 11. 17. 18:31

--------------------------------------------------------------------------------------------------------

요즘 소셜(SNS)댓글 시스템이 커뮤니티 사이트에서 관심을 받고 있습니다.

이전에 IT관련 회사들은 어떻게 하면 회원가입률을 높일까를 고민하다 이제는 어떻게 하면 커뮤니티를 활성화 시킬 수 있을까로 고민이 바뀌고 있죠. 말 그대로 좋은 정보를 제공하는 것도 중요하지만, 방문자의 호응을 쉽게 이끌어내기 위한 노력으로 SNS 댓글시스템이 각광을 받고 있지 않나 싶습니다.

각 SNS(트위터, 페이스북, 미투데이, 요즘 등) 서비스들의 로그인 API연동에 대한 FAQ를 정리해보도록 하겠습니다.

개발하실 분들은 참조해서 도움이 되셨으면 좋겠습니다.

--------------------------------------------------------------------------------------------------------

페이스북 개발자 계정신청하고 기본 api 호출문으로 호출시 발생되는 상황대처법이다.

file_get_contents() 함수문제

[ 아래는 facebook 에서 제공하는 기본 api호출문 알리고리즘 ]

<?php

$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_URL";

session_start();
$code = $_REQUEST["code"];

if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];

echo("<script> top.location.href='" . $dialog_url . "'</script>");
}

if($_REQUEST['state'] == $_SESSION['state']) {
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;

$response = file_get_contents($token_url); // <--- file_get_contents 이 함수
$params = null;
parse_str($response, $params);

$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];

$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
}
else {
echo("The state does not match. You may be a victim of CSRF.");
}

?>

Warning:
file_get_contents(
https://graph.facebook.com/oauth/access_token?client_id=163002433768527&redirect_uri=http%3A%2F%2F211.242.255.46%3A81%2FAdmin%2FFtc_Manager%2FNew_Board%2Fview.php%3Fno%3D22%26cpage%3D1&client_secret=05f3f6baa5f3f5fa0985ea0d860cce53&code=Y4pqWCC_7Zsremr_dSHu7dzIWbfXBL91SnHDR4OvXVo.eyJpdiI6Im4tN2NfWnhNSGpGSlFXakNRSlp2RXcifQ.q26b7Al9E1PJWXlK02IzU0A7oTbQNduqUNXna6Ve7U5JCDxPnlSAY21c0GYDMQY_glFHu-rTw_PfqMHtr_SjkxxA8TLoIM35CZYtN2C_dvSSoTwJ1LjyJQGZ-eBtzAIl) [function.file-get-contents]:

file_get_contents 함수의 경우 보안상 서버설정에서 차단하는 경우가 많은데

이때는 하나의 기능을 위해 해당 함수를 풀지말고

socket 이나 curl 을 이용해 대처하면 된다.

<?

function http($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close ($ch);
return $response;
}

?>

위와같은 펑션을 추가하고 file_get_contents를 http()함수로 교체하면 해결~!

Comments