2010-10-11 12 views
12

Sto facendo una grande richiesta ai server brightcove per effettuare un cambio batch dei metadati nei miei video. Sembra che sia riuscito a farlo solo attraverso 1000 iterazioni e poi a fermarsi. Qualcuno può aiutarti a regolare questo codice per evitare che si verifichi un timeout? Deve fare circa 7000/8000 iterazioni.Prevenire il timeout durante una richiesta estesa in 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; 
     } 
    } 
?> 

Grazie!

+0

Proprio come una parola di avvertimento se decidi di utilizzare 'set_time_limit' su un'app basata su browser, probabilmente il tuo browser andrà in timeout prima di ricevere qualsiasi risposta. Non proprio una risposta, più solo informazioni utili;) – Catharsis

risposta

29

Provare la funzione set_time_limit(). La chiamata set_time_limit(0) rimuoverà qualsiasi limite di tempo per l'esecuzione dello script.

+0

Grazie, ha funzionato perfettamente. –

+7

Attenzione, firefox "sovrascrive" questo, con l'opzione 'network.http.keep-alive.timeout' – Baronth

0

Utilizzare anche ignore_user_abort() per ignorare l'interruzione del browser. Lo script continuerà a essere eseguito anche se si chiude il browser (usare con cautela).

1

Prova a inviare uno "Stato: 102 Elaborazione" di tanto in tanto per impedire il timeout del browser (la tua migliore scommessa è tra i 15 ei 30 secondi in mezzo). Dopo che la richiesta è stata elaborata, puoi inviare la risposta finale.

Il browser non dovrebbe scadere più in questo modo.

+0

Funziona? Mi piacerebbe usarlo, ma come intestazione CGI non è possibile inviare 'Status:' più di una volta. E come raggiungerà la versione HTTP di questa intestazione CGI (ad esempio "Elaborazione HTTP/1.210")? Il primo sarà inviato immediatamente? I successivi sono anche possibili/legali? –