Page 2 of 2

Re: HELP for file_get_contents

Posted: Mon Feb 04, 2013 11:38 pm
by Eric!
You should look at using curl instead of file_get_contents. It's more flexible and has debugging options for solving complex network connections.

But I still think your fundamental problem is with your graph.facebook.com URL.

Re: HELP for file_get_contents

Posted: Mon Feb 04, 2013 11:42 pm
by kimcorros7
Hmm. I also encountered curl while researching. I also want to try it, but honestly I am not a programmer. I'm just here to seek help from those who are masters on PHP. Can you help me out on translating it to curl or PHP SDK?

Re: HELP for file_get_contents

Posted: Tue Feb 05, 2013 12:10 am
by kimcorros7
Hello Eric. So far this is the code with curl function...

Code: Select all

function get_data_cURL($url)
{
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}
function generateCode($length) 
{
	$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";
    $code = "";
    $clen = strlen($chars) - 1;
    while (strlen($code) < $length) {
        $code .= $chars[mt_rand(0,$clen)];
    }
    return $code;
}
if($config['enable_fc'] == "1")
{
	if($_SESSION['USERID'] == "")
	{
		$A = $config['FACEBOOK_APP_ID'];
		$B = $config['FACEBOOK_SECRET'];
		define('FACEBOOK_APP_ID', $A);
		define('FACEBOOK_SECRET', $B);
		STemplate::assign('FACEBOOK_APP_ID',$A);
		STemplate::assign('FACEBOOK_SECRET',$B);
		
		function get_facebook_cookie($app_id, $application_secret) {
		  $args = array();
		  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
		  ksort($args);
		  $payload = '';
		  foreach ($args as $key => $value) {
			if ($key != 'sig') {
			  $payload .= $key . '=' . $value;
			}
		  }
		  if (md5($payload . $application_secret) != $args['sig']) {
			return null;
		  }
		  return $args;
		}
		
		$code = $_REQUEST['code'];
		if($code != "")
		{
			$my_url = $config['baseurl']."/";
			$token_url = "https://graph.facebook.com/oauth/access_token?"
			. "client_id=" . $A . "&redirect_uri=" . urlencode($my_url)
			. "&client_secret=" . $B . "&code=" . $code;
			$params = null;
			parse_str($response, $params);
			$graph_url = "https://graph.facebook.com/me?access_token=" 
			. $params['access_token'];
			$user = get_data_cURL($graph_url);
			$fname = htmlentities(strip_tags($user->name), ENT_COMPAT, "UTF-8");
			$femail = htmlentities(strip_tags($user->email), ENT_COMPAT, "UTF-8");
			
			$query="SELECT USERID FROM members WHERE email='".mysql_real_escape_string($femail)."' limit 1";
			$executequery=$conn->execute($query);
			$FUID = intval($executequery->fields['USERID']);
			if($FUID > 0)
			{									
				$query="SELECT USERID,email,username,verified, filter from members WHERE USERID='".mysql_real_escape_string($FUID)."' and status='1'";
				$result=$conn->execute($query);
				if($result->recordcount()>0)
				{
					$query="update members set lastlogin='".time()."', lip='".$_SERVER['REMOTE_ADDR']."' WHERE USERID='".mysql_real_escape_string($FUID)."'";
					$conn->execute($query);
					$_SESSION['USERID']=$result->fields['USERID'];
					$_SESSION['EMAIL']=$result->fields['email'];
					$_SESSION['USERNAME']=$result->fields['username'];
					$_SESSION['VERIFIED']=$result->fields['verified'];
					$_SESSION['FILTER']=$result->fields['filter'];
					$_SESSION['FB']="1";			
					header("Location:$config[baseurl]/");exit;
				}
			}
			else
			{
				$md5pass = md5(generateCode(5).time());
				
				if($fname != "" && $femail != "")
				{
					$query="INSERT INTO members SET email='".mysql_real_escape_string($femail)."',username='', password='".mysql_real_escape_string($md5pass)."', addtime='".time()."', lastlogin='".time()."', ip='".$_SERVER['REMOTE_ADDR']."', lip='".$_SERVER['REMOTE_ADDR']."', verified='1'";
					$result=$conn->execute($query);
					$userid = mysql_insert_id();
					if($userid != "" && is_numeric($userid) && $userid > 0)
					{
						$query="SELECT USERID,email,verified, filter from members WHERE USERID='".mysql_real_escape_string($userid)."'";
						$result=$conn->execute($query);
						
						$SUSERID = $result->fields['USERID'];
						$SEMAIL = $result->fields['email'];
						$SVERIFIED = $result->fields['verified'];
						$SFILTER = $result->fields['filter'];
						$_SESSION['USERID']=$SUSERID;
						$_SESSION['EMAIL']=$SEMAIL;
						$_SESSION['VERIFIED']=$SVERIFIED;
						$_SESSION['FILTER']=$SFILTER;
						$_SESSION['FB']="1";				
						header("Location:$config[baseurl]/connect.php");exit;
					}
				}
			}
		}
	}
	function getCurrentPageUrl()
	{
		 static $pageURL = '';
		 if(empty($pageURL)){
			  $pageURL = 'http';
			  if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')$pageURL .= 's';
			  $pageURL .= '://';
			  if($_SERVER['SERVER_PORT'] != '80')$pageURL .= $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];
			  else $pageURL .= $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
		 }
		 return $pageURL;
	} 
	if($_SESSION['USERNAME'] == "" && $_SESSION['FB'] == "1")
	{	
		$url = getCurrentPageUrl();
		$myurl = $config['baseurl']."/connect.php";
		$cssurl = $config['baseurl']."/css/connect.css";
		if(($url != $myurl) && ($url != $cssurl))
		{
			header("Location:$config[baseurl]/connect.php");exit;
		}
	}
}

But still I can't login with my Facebook account. It just returns me to the homepage with this url:
http://www.hahapinoy.com/?code=AQDwqnLn ... uxNoyl#_=_

Can you tell me what's wrong with the code above? Thanks. This is the only problem that I am facing now before I'm going to launch the site. Please help me master.

Re: HELP for file_get_contents

Posted: Tue Feb 05, 2013 5:22 pm
by Eric!
For debugging curl do something like this

Code: Select all

function get_data_cURL($url,$fp_debug)
{
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
            curl_setopt($ch, CURLOPT_VERBOSE, TRUE); // for debugging
            curl_setopt($ch, CURLOPT_STDERR, $fp_debug); //for debugging, need file pointer

  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}
In your code, call it like this, and setup a debug file:

Code: Select all

           $fp_debug= fopen("debug.txt", "w"); // setup debug file -- make sure PHP and apache has permission to WRITE to this directory
// your other code goes here
// when you want to call your curl function pass the pointer to your "debug.txt" file
           $user=get_data_cURL($url,$fp_debug);
// other code goes here...
// if you need to call curl again
           $more_data=get_data_cURL($url,$fp_debug); // this will keep adding info to your debug.txt file
// when your routine is done, close the file
           fclose($fp_debug); //for debugging
Then look in the debug.txt and this will help you find what you are doing wrong when communicating with facebook.

Re: HELP for file_get_contents

Posted: Tue Feb 05, 2013 6:28 pm
by kimcorros7
In which part should I place those codes? Thank you I'll try this.

Re: HELP for file_get_contents

Posted: Tue Feb 05, 2013 6:50 pm
by kimcorros7
THANKS ERIC. This is what goes into the debug.txt
* <url> malformed

what should i do with this?

Re: HELP for file_get_contents

Posted: Tue Feb 05, 2013 7:14 pm
by kimcorros7
changing the $url to 'http://hahapinoy.com/login/' this is the result

* Connection #0 to host http://www.hahapinoy.com left intact
* Closing connection #0

Re: HELP for file_get_contents

Posted: Tue Feb 05, 2013 7:49 pm
by Eric!
The first error should be a clue that your URL is wrong.

And you're posting results from a different URL and that can't be the complete debug.txt file. If it is the complete debug.txt there is something wrong with your code. Post your full debug.txt and code.