2010-10-11 13 views
12

Wysyłam duże żądanie do serwerów Brightcove, aby dokonać metamaterialnej zmiany w moich filmach. Wygląda na to, że przeszło tylko 1000 iteracji, a następnie zostało zatrzymanych - czy ktoś może pomóc w dostosowaniu tego kodu, aby zapobiec przekroczeniu limitu czasu? Musi wykonać około 7000/8000 iteracji.Zapobiegaj przekroczeniu limitu czasu podczas dużych żądań w PHP

<?php 
include 'echove.php'; 

$e = new Echove(
    'xxxxx', 
    'xxxxx' 
); 

// Read Video IDs 
# Define our parameters 
$params = array(
    'fields'   => 'id,referenceId' 

); 

# Make our API call 
$videos = $e->findAll('video', $params); 


    //print_r($videos); 
    foreach ($videos as $video) { 

     //print_r($video); 
     $ref_id = $video->referenceId; 
     $vid_id = $video->id; 

     switch ($ref_id) { 
      case "": 
       $metaData = array(
        'id' => $vid_id, 
        'referenceId' => $vid_id 
       ); 

       # Update a video with the new meta data 
       $e->update('video', $metaData);     
       echo "$vid_id updated sucessfully!<br />"; 
       break; 
      default: 
       echo "$ref_id was not updated. <br />"; 
       break; 
     } 
    } 
?> 

Dzięki!

+0

Tak samo jak słowo ostrzeżenia, jeśli kiedykolwiek zdecydujesz się użyć 'set_time_limit' w aplikacji opartej na przeglądarce, twoja przeglądarka prawdopodobnie przestanie działać zanim otrzymasz jakąkolwiek odpowiedź. Naprawdę nie jest to odpowiedź, bardziej po prostu pomocne informacje;) – Catharsis

Odpowiedz

29

Wypróbuj funkcję set_time_limit(). Wywołanie set_time_limit(0) usunie wszelkie ograniczenia czasowe dotyczące wykonania skryptu.

+0

Dzięki, to działało idealnie. –

+7

Uważaj, Firefox "nadpisuje" to, z opcją 'network.http.keep-alive.timeout' – Baronth

0

Użyj również ignore_user_abort(), aby pominąć przerwanie przeglądarki. Skrypt będzie działał nawet po zamknięciu przeglądarki (należy zachować ostrożność).

1

Spróbuj wysłać "Status: 102 Processing" co jakiś czas, aby zapobiec przekroczeniu limitu czasu przeglądarki (najlepiej między 15 a 30 sekundami). Po przetworzeniu wniosku możesz wysłać ostateczną odpowiedź.

Przeglądarka nie powinna przekraczać limitu czasu w ten sposób.

+0

Czy to działa? Chciałbym go użyć, ale jako nagłówek CGI nie można wysyłać "Statusu:" więcej niż raz. W jaki sposób wersja HTTP tego nagłówka CGI (np. "HTTP/1.2 102 Processing") dotrze do przeglądarki? Czy pierwszy zostanie wysłany natychmiast? Czy kolejne są możliwe/legalne? –

Powiązane problemy