我正在使用PHP-SDK超时

时间:2012-03-03 19:47:27

标签: php facebook-graph-api facebook-php-sdk

我正在努力计算我和所有朋友的共同朋友的数量。

foreach($friends_list as $friend)
{   
    $id = $friend['id'];
    $name = $friend['name'];
    $arr = $facebook->api('/me/mutualfriends/'.$id);
    $arr = $arr['data'];
    $count = count($arr);
    $totalcount = $totalcount + $count;
    $i++;
    echo $id. "  " .$name . "  " . $count . "</br>";
} 

但是我得到的时间就像获得了大约20个frnds的数据一样。我该如何进行优化?

3 个答案:

答案 0 :(得分:1)

由于php.inimax_execution_time的配置设置,您的脚本出现超时,如果您在运行该长操作之前使用此类内容,则可以轻松避免这种情况:

set_time_limit(0);
// execute long running code...

在循环中对外部服务做很多请求是很糟糕的,并且有很多方法可以更快地改进代码。

选项1:您可以Batch Requests使用Graph API一次运行多个请求(最多50个)。

选项2:您可以在其他方向获得mutualfriends连接(一次为多个朋友获取结果)。

https://graph.facebook.com/mutualfriends/YOUR_ID?ids=friend_1,friend_2,friend_n

这通常与:

相同
https://graph.facebook.com/friend_1/mutualfriends/YOUR_ID
https://graph.facebook.com/friend_2/mutualfriends/YOUR_ID
https://graph.facebook.com/friend_n/mutualfriends/YOUR_ID

答案 1 :(得分:0)

我建议在该循环中放置一个sleep,以免服务器过载。

e.g。

foreach( $friends_list as $friend )
{
    $id = $friend['id'];
    $name = $friend['name'];
    $arr = $facebook->api('/me/mutualfriends/'.$id);
    $arr = $arr['data'];
    $count = count($arr);
    $totalcount = $totalcount + $count;
    $i++;
    echo $id. " " .$name . " " . $count . "";

    usleep( 100000 );
}

在每次请求后等待100毫秒。

答案 2 :(得分:0)

更新php.ini文件中的'max_execution_time'设置。默认限制为30秒,如果存在,则为php.ini中定义的max_execution_time值。

http://php.net/manual/en/function.set-time-limit.php