Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Facebook呼叫以重定向结束,直到超时_Php_Facebook_Facebook Graph Api_Facebook Php Sdk_Facebook Access Token - Fatal编程技术网

Php Facebook呼叫以重定向结束,直到超时

Php Facebook呼叫以重定向结束,直到超时,php,facebook,facebook-graph-api,facebook-php-sdk,facebook-access-token,Php,Facebook,Facebook Graph Api,Facebook Php Sdk,Facebook Access Token,这件事我已经做了好几天了,但我找不到任何解决办法。我有两个脚本:getPhotos.php和getVideos.php。如果我运行一个或另一个,一切正常,其中任何一个都将在大约1秒内有200个正常代码。但是,如果我一个接一个地运行,第一个将执行(200 OKcode),第二个将只找到302编码并重新发送,直到超时 getPhotos.php include '../utils.php'; $photos=NULL; if($user_id) { try {

这件事我已经做了好几天了,但我找不到任何解决办法。我有两个脚本:
getPhotos.php
getVideos.php
。如果我运行一个或另一个,一切正常,其中任何一个都将在大约1秒内有
200个正常
代码。但是,如果我一个接一个地运行,第一个将执行(
200 OK
code),第二个将只找到
302
编码并重新发送,直到超时

getPhotos.php

include '../utils.php';
$photos=NULL;
    if($user_id) {
          try {
            if(is_null($photos))
                $photos=$facebook->api(array(
                 'method' => 'fql.query',
                  'query' => 'SELECT aid,backdated_time,caption,link,pid,place_id FROM photo WHERE owner=me()'
              ));
            if ($photos) {
                $json_photos=json_encode($photos);
              $stmt=$dbconn->prepare("UPDATE public.account_recover_users SET user_photos= :photos WHERE user_mail= :email");
                if(!$stmt->execute(array(':photos'=>$json_photos,':email'=>$email)))
                    exit('{ "status": false }');
                else exit('{ "status": true }');
            }
            else exit('{ "status": false }');

        }
        catch(FacebookApiException $e){
             echo error_log($e);
        }
    }
    else
        echo "User not logged in";
include '../utils.php';
$videos=NULL;
    if($user_id) {
          try {
            if(is_null($videos))
            $videos=$facebook->api(array(
                 'method' => 'fql.query',
                  'query' => 'SELECT album_id,description,link,vid,title FROM video WHERE owner=me()'
              ));
              if ($videos) {
                  $json_videos=json_encode($videos);
                  $stmt=$dbconn->prepare("UPDATE public.account_recover_users SET user_videos= :videos WHERE user_mail= :email");
                  if(!$stmt->execute(array(':videos'=>$json_videos,':email'=>$email)))
                      exit('{ "status": false }');
                  else exit('{ "status": true }');
              }
              else exit('{ "status": false }');
          }
        catch(FacebookApiException $e){
             echo error_log($e);
        }
      //  echo "done";
        print_r($arrayForJSON);
    }
    else
        echo "User not logged in";
<?php
require_once('sdk/src/facebook.php');
require_once("AppInfo.php");
function idx(array $array, $key, $default = null) {
    return array_key_exists($key, $array) ? $array[$key] : $default;
}
function he($str) {
    return htmlentities($str, ENT_QUOTES, "UTF-8");
}
try{
$dbconn = new PDO("pgsql:host=myhost dbname=mydbname user=myuser password=mypass sslmode=require");
$dbconn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
$facebook = new Facebook(array(
    'appId'  => AppInfo::appID(),
    'secret' => AppInfo::appSecret(),
    'sharedSession' => true,
    'trustForwarded' => true,
    'file_upload' =>true
));
$user_id = $facebook->getUser();
$app_info = $facebook->api('/'. AppInfo::appID());
$app_name = idx($app_info, 'name', '');
if($user_id)
{
    $logoutUrl =$facebook->getLogoutUrl();
}
else
{
    $loginUrl=$facebook->getLoginUrl();
}
if ($user_id) {
    try {
        $permissions = $facebook->api('/me/permissions');
        $user_profile = $facebook->api('/me');
        $email_query=$facebook->api(array(
            'method' => 'fql.query',
            'query' => 'SELECT email FROM user WHERE uid=me()'
        ));
        $email=$email_query[0]['email'];//['data']['email'];
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            header('Location: '. AppInfo::getUrl($_SERVER['REQUEST_URI']));
            exit();
        }
    }
}
$token=$facebook->getAccessToken();
getVideos.php

include '../utils.php';
$photos=NULL;
    if($user_id) {
          try {
            if(is_null($photos))
                $photos=$facebook->api(array(
                 'method' => 'fql.query',
                  'query' => 'SELECT aid,backdated_time,caption,link,pid,place_id FROM photo WHERE owner=me()'
              ));
            if ($photos) {
                $json_photos=json_encode($photos);
              $stmt=$dbconn->prepare("UPDATE public.account_recover_users SET user_photos= :photos WHERE user_mail= :email");
                if(!$stmt->execute(array(':photos'=>$json_photos,':email'=>$email)))
                    exit('{ "status": false }');
                else exit('{ "status": true }');
            }
            else exit('{ "status": false }');

        }
        catch(FacebookApiException $e){
             echo error_log($e);
        }
    }
    else
        echo "User not logged in";
include '../utils.php';
$videos=NULL;
    if($user_id) {
          try {
            if(is_null($videos))
            $videos=$facebook->api(array(
                 'method' => 'fql.query',
                  'query' => 'SELECT album_id,description,link,vid,title FROM video WHERE owner=me()'
              ));
              if ($videos) {
                  $json_videos=json_encode($videos);
                  $stmt=$dbconn->prepare("UPDATE public.account_recover_users SET user_videos= :videos WHERE user_mail= :email");
                  if(!$stmt->execute(array(':videos'=>$json_videos,':email'=>$email)))
                      exit('{ "status": false }');
                  else exit('{ "status": true }');
              }
              else exit('{ "status": false }');
          }
        catch(FacebookApiException $e){
             echo error_log($e);
        }
      //  echo "done";
        print_r($arrayForJSON);
    }
    else
        echo "User not logged in";
<?php
require_once('sdk/src/facebook.php');
require_once("AppInfo.php");
function idx(array $array, $key, $default = null) {
    return array_key_exists($key, $array) ? $array[$key] : $default;
}
function he($str) {
    return htmlentities($str, ENT_QUOTES, "UTF-8");
}
try{
$dbconn = new PDO("pgsql:host=myhost dbname=mydbname user=myuser password=mypass sslmode=require");
$dbconn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
$facebook = new Facebook(array(
    'appId'  => AppInfo::appID(),
    'secret' => AppInfo::appSecret(),
    'sharedSession' => true,
    'trustForwarded' => true,
    'file_upload' =>true
));
$user_id = $facebook->getUser();
$app_info = $facebook->api('/'. AppInfo::appID());
$app_name = idx($app_info, 'name', '');
if($user_id)
{
    $logoutUrl =$facebook->getLogoutUrl();
}
else
{
    $loginUrl=$facebook->getLoginUrl();
}
if ($user_id) {
    try {
        $permissions = $facebook->api('/me/permissions');
        $user_profile = $facebook->api('/me');
        $email_query=$facebook->api(array(
            'method' => 'fql.query',
            'query' => 'SELECT email FROM user WHERE uid=me()'
        ));
        $email=$email_query[0]['email'];//['data']['email'];
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            header('Location: '. AppInfo::getUrl($_SERVER['REQUEST_URI']));
            exit();
        }
    }
}
$token=$facebook->getAccessToken();
现在,utils.php可能很重要,因此我还将为其提供代码:

utils.php

include '../utils.php';
$photos=NULL;
    if($user_id) {
          try {
            if(is_null($photos))
                $photos=$facebook->api(array(
                 'method' => 'fql.query',
                  'query' => 'SELECT aid,backdated_time,caption,link,pid,place_id FROM photo WHERE owner=me()'
              ));
            if ($photos) {
                $json_photos=json_encode($photos);
              $stmt=$dbconn->prepare("UPDATE public.account_recover_users SET user_photos= :photos WHERE user_mail= :email");
                if(!$stmt->execute(array(':photos'=>$json_photos,':email'=>$email)))
                    exit('{ "status": false }');
                else exit('{ "status": true }');
            }
            else exit('{ "status": false }');

        }
        catch(FacebookApiException $e){
             echo error_log($e);
        }
    }
    else
        echo "User not logged in";
include '../utils.php';
$videos=NULL;
    if($user_id) {
          try {
            if(is_null($videos))
            $videos=$facebook->api(array(
                 'method' => 'fql.query',
                  'query' => 'SELECT album_id,description,link,vid,title FROM video WHERE owner=me()'
              ));
              if ($videos) {
                  $json_videos=json_encode($videos);
                  $stmt=$dbconn->prepare("UPDATE public.account_recover_users SET user_videos= :videos WHERE user_mail= :email");
                  if(!$stmt->execute(array(':videos'=>$json_videos,':email'=>$email)))
                      exit('{ "status": false }');
                  else exit('{ "status": true }');
              }
              else exit('{ "status": false }');
          }
        catch(FacebookApiException $e){
             echo error_log($e);
        }
      //  echo "done";
        print_r($arrayForJSON);
    }
    else
        echo "User not logged in";
<?php
require_once('sdk/src/facebook.php');
require_once("AppInfo.php");
function idx(array $array, $key, $default = null) {
    return array_key_exists($key, $array) ? $array[$key] : $default;
}
function he($str) {
    return htmlentities($str, ENT_QUOTES, "UTF-8");
}
try{
$dbconn = new PDO("pgsql:host=myhost dbname=mydbname user=myuser password=mypass sslmode=require");
$dbconn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
$facebook = new Facebook(array(
    'appId'  => AppInfo::appID(),
    'secret' => AppInfo::appSecret(),
    'sharedSession' => true,
    'trustForwarded' => true,
    'file_upload' =>true
));
$user_id = $facebook->getUser();
$app_info = $facebook->api('/'. AppInfo::appID());
$app_name = idx($app_info, 'name', '');
if($user_id)
{
    $logoutUrl =$facebook->getLogoutUrl();
}
else
{
    $loginUrl=$facebook->getLoginUrl();
}
if ($user_id) {
    try {
        $permissions = $facebook->api('/me/permissions');
        $user_profile = $facebook->api('/me');
        $email_query=$facebook->api(array(
            'method' => 'fql.query',
            'query' => 'SELECT email FROM user WHERE uid=me()'
        ));
        $email=$email_query[0]['email'];//['data']['email'];
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            header('Location: '. AppInfo::getUrl($_SERVER['REQUEST_URI']));
            exit();
        }
    }
}
$token=$facebook->getAccessToken();

因此,正如我们在Facebook开发者小组中所讨论的,例外情况是“必须使用活动访问令牌来查询当前用户的信息”

显然,在初始化Facebook对象时删除“sharedSession”参数解决了问题


(我不知道“trustForwarded”应该做什么,以前从来没有见过这个参数。可能来自旧版本的SDK。在BLaZuRE的评论之后,我查看了SDK源代码,那里的评论说“表明我们是否信任HTTP_X_FORWARDED_*头。”所以现在也很清楚了。)

“第二个将只有302找到的代码”–重定向的唯一位置是在catch块中–这意味着抛出了一个异常。因此,也许最好看看异常实际上要说什么,而不是只是重定向,而不给出一个…实际错误可能是什么,你不这样认为吗。@CBroe我想我没有犯myself清除。第二个代码是getPhotos和getVideos中都包含的代码。我编辑了我的问题。我不在乎你是否包含了两百万次。你显然得到了一个异常,但你不在乎它是关于什么的,而不是查看错误消息来找出它是关于什么的。你可以重定向它吗在愚蠢的重定向之上,现在检查错误消息?我和一个朋友一直在做这个项目,所以我从他那里得到了UTIL的代码。我还删除了“trustForwarded”,如果你有问题,请阅读文档或源代码。不要盲目地进入。