Я получаю тайм-аут с использованием PHP-SDK - PullRequest
0 голосов
/ 03 марта 2012

Я пытаюсь подсчитать количество моих общих друзей со всеми моими друзьями.

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 друзьях.Как мне его оптимизировать?

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Вы получаете тайм-аут в вашем скрипте из-за настроек конфигурации для max_execution_time в php.ini, и этого можно легко избежать, если вы будете использовать что-то подобное перед запуском этой длинной операции:

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

Выполнение большого количества запросов к внешним службам в цикле - это плохо, и есть несколько способов улучшить ваш код, чтобы быть намного быстрее.

Вариант 1. Вы можете использовать Пакетные запросы для 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
0 голосов
/ 04 марта 2012

Обновите настройки 'max_execution_time' в вашем файле php.ini. Предел по умолчанию составляет 30 секунд или, если он существует, значение max_execution_time, определенное в php.ini.

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

0 голосов
/ 03 марта 2012

Я бы предложил поместить sleep в этот цикл, чтобы не перегружать сервер.

, например

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 миллисекунд после каждого запроса.

...