2010-10-11 12 views
12

Estoy haciendo una gran solicitud a los servidores de Brightcove para realizar un cambio de metadatos por lotes en mis videos. Parece que solo pasó por 1000 iteraciones y luego se detuvo. ¿Alguien puede ayudar a ajustar este código para evitar que se agote el tiempo de espera? Necesita hacer alrededor de 7000/8000 iteraciones.Prevenir el tiempo de espera durante la solicitud grande en 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; 
     } 
    } 
?> 

¡Gracias!

+0

Solo como una palabra de advertencia si alguna vez decide usar 'set_time_limit' en una aplicación basada en navegador, entonces su navegador probablemente se desconectará antes de recibir ninguna respuesta. No es realmente una respuesta, más información útil;) – Catharsis

Respuesta

29

Pruebe la función set_time_limit(). Llamar al set_time_limit(0) eliminará cualquier límite de tiempo para la ejecución del script.

+0

Gracias, esto funcionó a la perfección. –

+7

Cuidado, Firefox "sobrescribe" esto, con la opción 'network.http.keep-alive.timeout' – Baronth

0

También use ignore_user_abort() para omitir el aborto del navegador. La secuencia de comandos seguirá ejecutándose incluso si cierra el navegador (úselo con precaución).

1

Intente enviar un 'Estado: 102 Procesando' de vez en cuando para evitar que el navegador agote el tiempo de espera (su mejor opción es de 15 a 30 segundos en el medio). Una vez procesada la solicitud, puede enviar la respuesta final.

El navegador no debe esperar más tiempo de esta manera.

+0

¿Funciona? Me encantaría usarlo, pero como un encabezado CGI, no se te permite enviar 'Status:' más de una vez. ¿Y cómo llegará la versión HTTP de este encabezado CGI (por ejemplo, "HTTP/1.2 102 Processing") al navegador? ¿El primero será enviado de inmediato? ¿Los subsiguientes son posibles/legales? –

Cuestiones relacionadas