Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como puedo parar un ciclo while 3 segundos

Estas en el tema de Como puedo parar un ciclo while 3 segundos en el foro de PHP en Foros del Web. Hola a todos Primero agradecer este magnífico foro y a sus usuarios que siempre me ayudan en la solución de problemas en mis códigos. Tengo ...
  #1 (permalink)  
Antiguo 16/10/2014, 11:05
 
Fecha de Ingreso: mayo-2013
Ubicación: Alicante
Mensajes: 35
Antigüedad: 10 años, 10 meses
Puntos: 0
Como puedo parar un ciclo while 3 segundos

Hola a todos
Primero agradecer este magnífico foro y a sus usuarios que siempre me ayudan en la solución de problemas en mis códigos.

Tengo este código php que me verifica las url de videos que tengo en las páginas de mi sitio. Funciona perfectamente para lo que yo lo necesito, el problema es que al ejecutar el ciclo sin parar, cuando tarda mucho la página se cae, error 504 Gateway Time-out.

Quisiera saber si podría ponerle alguna pausa o un stop por 3 segundos entre cada pagina. O sea verifica 1ra página, para 3seg y continua para la segunda y luego para 3seg y continua...

Código PHP:
function verif_url(){
    
$pro = (int) $_POST['pid'];
    
$sql mysql_query("SELECT * FROM productos");

    while( 
$producto mysql_fetch_array($sql) ){
        
$pid $producto['pid'];
        
$url "http://www.ejemplo.com/producto/{$pid}/";
   
    
$document = new DOMDocument();
    
$document->loadHTML(file_get_contents($url));
    
$list $document->getElementsByTagName('iframe');

    for (
$i=0$i<$list->length$i++) {
        
$iframe $list->item($i);
        
     
$srcpag file_get_contents($iframe->attributes->getNamedItem('src')->value'<br />');
     
$document->loadHTML($srcpag);
     

     
$op1 'No videos found.';
     
$op2 'File was deleted';


     
$contop1 strpos($srcpag$op1);
     
$contop2 strpos($srcpag$op2);

    }

    if (
$contop1 !== false) {
    
//     "realiza determinada funcion";
}
     if(
$contop2 !== false) {
    
//    "realiza determinada funcion";
}

        }
         
        } 
Intenté poniendo sleep(3); dentro o fuera del while pero no me funcionó. Tarda mas todavía y continua cargando la página hasta caerse.

¿Tendrá solución?
  #2 (permalink)  
Antiguo 16/10/2014, 11:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo parar un ciclo while 3 segundos

Bueno, primero dices que haga pausas de 3 segundos entre pagina, para eso es sleep(3) y dices que es más lento.

Obviamente será más lento, ¿notas la contradicción?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 17/10/2014, 05:19
 
Fecha de Ingreso: mayo-2013
Ubicación: Alicante
Mensajes: 35
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Como puedo parar un ciclo while 3 segundos

Parece ser que no se me entendió. Tarda más porque se agregan 3 segundos entre página lógico, pero la página no para y luego continúa, sino que continúa procesando y al demorar se cae. He probado con un break; y luego return al while me da error.
  #4 (permalink)  
Antiguo 17/10/2014, 05:29
 
Fecha de Ingreso: junio-2011
Ubicación: Asturias
Mensajes: 228
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Como puedo parar un ciclo while 3 segundos

El problema es que al hacer eso, tu página tardará más y se caerá antes.
Si lo he entendido bien tienes 2 soluciones.
Una, aumentar el tiempo de timeout en el archivo php.ini para que no se caiga.
Dos, cuando lleves x tiempo, recargar la página (o redirigir a una nueva) y que siga desde ahí.

Si no era ese el problema, intenta explicarlo mejor.
Un saludo
  #5 (permalink)  
Antiguo 17/10/2014, 10:10
 
Fecha de Ingreso: mayo-2013
Ubicación: Alicante
Mensajes: 35
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Como puedo parar un ciclo while 3 segundos

Cita:
Iniciado por javierflti Ver Mensaje
El problema es que al hacer eso, tu página tardará más y se caerá antes.
Si lo he entendido bien tienes 2 soluciones.
Una, aumentar el tiempo de timeout en el archivo php.ini para que no se caiga.
Dos, cuando lleves x tiempo, recargar la página (o redirigir a una nueva) y que siga desde ahí.

Si no era ese el problema, intenta explicarlo mejor.
Un saludo
Gracias Javier por tu respuesta.
Lo de aumentar el tiempo de timeout en el archivo php.ini no creo que dependa de mi sinó del plan de hosting, creo que yo no puedo cambiarlo. Lo podría hablar con el soporte técnico pero no creo que me den mucho tiempo más.

Si me serviría decirle que cuando lleve x tiempo recargue la página o salga del ciclo, pero no sé exactamente que poner en este código para que lo haga. ¿Conocer que función me serviría? Intenté también poniendo dentro del for if ($i=10){ break;}

Para decirle que cuando verifique 10 páginas salga, pero no me valió.
  #6 (permalink)  
Antiguo 17/10/2014, 11:05
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Como puedo parar un ciclo while 3 segundos

Puedes hacer que tu script funcione como una especie de "demonio" de fondo de forma constante.
http://php.net/manual/es/function.ignore-user-abort.php y en cada ciclo, guardas en un archivo de log tuyo que es lo que hizo. luego tienes otra pagina que solo lea el archivo y lo muestre en pantalla. Abres el link al archivo "demonio" y lo cierras, luego abres la pagina que muestra el log y cada cierto tiempo la recargas manualmente y te fijas que lo hizo el otro script.

NOTA: Notese que use la palabra "demonio" entre comillas, en realidad es un proceso que corre en background que puede ser destruido.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 27/10/2014, 12:14
 
Fecha de Ingreso: mayo-2013
Ubicación: Alicante
Mensajes: 35
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Como puedo parar un ciclo while 3 segundos

Lo he podido solucionar simplemente enviando la función a un archivo externo con jquery.
Gracias a todos por sus ayudas.

Etiquetas: php+base+de+datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:55.