Медленный скрипт ... хочу отобразить iframe - PullRequest
0 голосов
/ 26 декабря 2010

У меня есть php-скрипт, который работает медленно, но должен завершиться полностью.В конце скрипта он перенаправляет на URL.

Я думаю о том, как-то отобразить iframe во время загрузки скрипта, чтобы посетители не покидали страницу.Каков наилучший способ сделать это?С iframe не было бы необходимости перенаправлять после завершения сценария.

    <?php

require_once('config.php');

if(!$_SESSION['init']){
    die;
}

unset($_SESSION['init']);

require_once('facebook.php');

$data = loaddata();
$facebook = new Facebook(array(
  'appId'  => $fbappid,
  'secret' => $appsecret,
  'cookie' => true,
));

$friendsdate = $facebook->api('/me/friends');
if($friendsdate && $friendsdate['data'] && count($friendsdate['data'])){
    $friends = array();
    foreach($friendsdate['data'] as $f){
        $friends[] = $f['id'];
    }

    sleep(3);

    $session = $facebook->getSession();
    $params = array('name' => $data['name'], 
                     'start_time' => $data['start_time'], 
                     'end_time' => $data['end_time'],
                     'description' => $data['description']);
    if($data['source']){
        $params['source'] = '@'.realpath('image/'.$data['source']);
        $facebook->setFileUploadSupport(true);
    }
    $result = $facebook->api('/me/events', 'POST', $params);

    sleep(4);
    $eid = $result['id'];

    $params = array(
        'access_token' => $facebook-> getAccessToken(),
        'eid' =>$eid,
        'api_key' => $fbappid,
        'uids'=> implode(',', $friends),
        'format'=>'json-strings',
        'personal_message'=> $data['personal_message']
    );

    $url = 'https://api.facebook.com/method/events.invite';
    $facebook->setFileUploadSupport(false);
    $result = $facebook->makeRequest($url, $params);
}

header('Location: '.$data['url']);

Ответы [ 2 ]

0 голосов
/ 26 декабря 2010

Да, это будет работать, API-интерфейс Facebook иногда работает очень медленно, поэтому вы можете использовать iframe или ajax.

Для iframe - просто замените последний заголовок ('location: ... с перенаправлением javascript

echo "<script>self.parent.location = 'http:// ... ';</script>";

Также вы должны выполнить session_commit где-нибудь наверху скрипта, если вы используете сессии php, потому что в противном случае iframe может заблокировать основной скрипт. AJAX ... на самом деле не нужно.

0 голосов
/ 26 декабря 2010

Правильный способ сделать то, что вы хотите, это использовать ajax.

Главная страница:
Показывает какое-то "рабочее" сообщение в div.
При загрузке javascript вызываетрабочая страница.
При ответе javascript заменяет «рабочий» div ответом с рабочей страницы.

Рабочая страница:
Работает ли ваш длинный php.
Отображает все, что вы считаете подходящим.

Вот руководство по AJAX, с которого можно начать: http://www.w3schools.com/ajax/default.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...