Foros del Web » Programando para Internet » PHP »

While se detiene sin causa aparente

Estas en el tema de While se detiene sin causa aparente en el foro de PHP en Foros del Web. Hola a todos, tengo un script que quiero que haga lo siguiente. 1- Coge unos datos de una base de datos. 2- Hace un bucle ...
  #1 (permalink)  
Antiguo 26/08/2012, 15:51
 
Fecha de Ingreso: julio-2008
Mensajes: 84
Antigüedad: 15 años, 9 meses
Puntos: 0
While se detiene sin causa aparente

Hola a todos, tengo un script que quiero que haga lo siguiente.

1- Coge unos datos de una base de datos.
2- Hace un bucle que en el que.
a) Hace unos cálculos medianamente complejos con ellos, que incluyen 'file_get_contents' de otros sitio web.
b) Guarda los resultados en una determinada tabla.

EL PROBLEMA es que después de que el loop haya funcionado correctamente 29 veces se detiene sin causa aparente.

Actualmente tengo puesto al empezar:
Código:
 ini_set("memory_limit","512M");  
 set_time_limit (0);
Además, para debug antes de hacer el bucle que menciono en el punto 2 hago otro bucle en el que compruebo que el RESULT es correcto y tiene los 200 resultados, después reinicio el RESULT y corro el bucle del punto 2, que se detiene después de 29 vueltas.

Por supuesto, no se ejecuta nada que haya después del bucle.

El bucle lo hago así (tanto en el caso de prueba, que funciona correctamente, como en el que se queda a las 29 vueltas)
Código:
while ($row = mysql_fetch_array($result)) {
¿Alguna idea de por qué puede pasar esto?

Gracias
  #2 (permalink)  
Antiguo 26/08/2012, 19:00
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: While se detiene sin causa aparente

si siempre se para en el resultado 29 entonces enfocate en ese resultado, que datos trae y como lo manejas con los otros sitios web

yo creo que por alli va el problema por lo que leo
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #3 (permalink)  
Antiguo 27/08/2012, 01:42
 
Fecha de Ingreso: julio-2008
Mensajes: 84
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: While se detiene sin causa aparente

Cita:
Iniciado por johhan16 Ver Mensaje
si siempre se para en el resultado 29 entonces enfocate en ese resultado, que datos trae y como lo manejas con los otros sitios web

yo creo que por alli va el problema por lo que leo
No es esto, he eliminado ese registro y el siguiente de la lista. Y sigue parándose en la iteración 29 (que ahora es un resultado distinto.
He probado incluso a eliminar los 30 primeros registros de la base de datos. Y sigue parándose tras 29 iteraciones.


Lo que sí he conseguido es lo siguiente:

Si al file_get_contents() le pongo que traiga un límite de 500.000 caracteres continúa unas 86 iteraciones. Si le pongo un límite de 300.000 caracteres hace 150 iteraciones.

Por lo tanto debe tener que ser que se "atraganta" el script en algún momento. Lo que no tengo muy claro es cuando se "atraganta", ni como arreglarlo.

Es decir, cada iteración del bucle usa las mismas variables, por lo tanto no hay una variable que "vaya creciendo a cada iteración".
No se bloquea cuando el archivo (html) que traigo es mayor de X caracteres, ya que cuando le pongo un límite de caracteres también se acaba atragantando (pero más tarde cuanto más bajo sea el límite).

¿alguna idea?
  #4 (permalink)  
Antiguo 27/08/2012, 03:18
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: While se detiene sin causa aparente

Seguro que no es un problema de memoria?, porque por el hecho de limitar la cantidad de caracteres y se ejecuten más iteraciones parece obvia la respuesta. podrías poner lo siguiente dentro del while:

Código PHP:
Ver original
  1. while(/* aqui tu condicion */) {
  2.     // Al inicio
  3.     echo 'Memoria inicial: ' . number_format(memory_get_usage(true));
  4.  
  5.     // Aquí ejecutas todos tus procedimientos
  6.  
  7.     // Al final
  8.     echo ' - Memoria final: ' . number_format(memory_get_usage(true)) . '<br />';
  9. }

Es difícil sugerir una solución sencilla sin ver lo que haces dentro del while.

Una opción sería limitar el número de sitios, digamos a 20, y después ejecutar nuevamente el script mediante exec() (procesando en segundo plano) para continuar donde se quedó, ya sea que envíes una variable por GET o guardes en la base de datos.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 27/08/2012, 09:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: While se detiene sin causa aparente

Loggea todo lo que puedas, puedes usar una herramienta como Zend_Log, ve guardando mensajes en cada parte de tu proceso, así vas a poder ver la causa del error, ya que pues es evidente que hay algo que lo esta parando, pero sin ver un log de errores es muy poco probable llegar a la causa.

Etiquetas: detiene, mysql, tabla
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 15:36.