Foros del Web » Programando para Internet » PHP »

¡¡El bucle no para en php!!

Estas en el tema de ¡¡El bucle no para en php!! en el foro de PHP en Foros del Web. Hola, compañeros! De nuevo estoy aquí con mis cosillas: Esta vez tengo un problema gordo (bueno, como siempre... jejeje) el caso es: Tengo una base ...
  #1 (permalink)  
Antiguo 26/05/2004, 04:20
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 14 años, 5 meses
Puntos: 0
Exclamación ¡¡El bucle no para en php!!

Hola, compañeros!

De nuevo estoy aquí con mis cosillas:
Esta vez tengo un problema gordo (bueno, como siempre... jejeje) el caso es:

Tengo una base de datos (ya me da igual cuál sea, me pasa siempre y con todas: Fox, Access...) y tengo una conexión a dicha base de datos mediante odbc y su respectivo driver, pero me ocurre lo siguiente: Cuando el resultado que debe retornar es muy largo no le da tiempo a terminar de recibir todo el resultado de la sql y me devuelve sólo trozos y, por tanto, el navegador solito vuelve a actualizarse para seguir recibiendo lo que resta, pero como ya ha perdido lo anterior... en definitiva: blucle infinito al canto y se produce un trabajo masivo de peticiones url y el php se cuelga, el apache se cuelga, el navegador se cuelga... resumiendo: un desastre.
Me han hablado de algo del modo de ejecución de las sql: asíncrona y síncrona, pero no sé ni qué es ni cómo se modifican esos parámetros...
Si alguien, por favor, puede echarme un cable, se lo agradezco de corazón. Estoy totalmente "aut"...

Un Saludo, compañeros. ¡Gracias de antemano!
  #2 (permalink)  
Antiguo 26/05/2004, 09:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si pones el código que usas sería lo ideal ..

PHP tiene y le dá un tiempo máximo de ejecución a un script .. también le otorga una cantidad de memoria al mismo .. así que si alguno de esos parámetros es sobrepasado por intentar ejecutar un proceso que demore más tiempo (o consumo de memoria) del que usa PHP por defecto .. podrías esperimentar esos problemas.

Revisa la funcion:
set_time_limit()
www.php.net/set_time_limint

Y la directiva de configuración de PHP.ini:
memory_limit
http://www.php.net/manual/en/configu...directives.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 26/05/2004, 09:38
Avatar de mautik  
Fecha de Ingreso: mayo-2004
Mensajes: 149
Antigüedad: 13 años, 7 meses
Puntos: 0
bla bla bla y el codigo?
__________________
123...probando...probando...123
  #4 (permalink)  
Antiguo 26/05/2004, 10:09
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 14 años, 5 meses
Puntos: 0
Gracias Cluster, como siempre, al pie del cañón... pero no me vale.
Para los que les molesta leer: el código:

//Abro la conexión:
//También he probado con odbc_pconnect, pero ídem...
$conexion = odbc_connect("dbprog", "", "");


//Hago el bucle:
//También he probado con odbc_do(), pero tampoco...
$consultaSQL = "SELECT * FROM reparto";
$resultado = odbc_exec($conexion,$consultaSQL);
//También he probado con odbc_fetch_row() y tampoco...
while ($algo=odbc_fetch_array($resultado))
{
if ($b == -1)
{
$color = 0;
}
else
{
$color = 1;
}
echo "<tr>";
//echo "<td>&nbsp;&nbsp;".trim(odbc_result($resultado,2)) ."</td>"; <--Con este tampoco va
echo "<td>&nbsp;&nbsp;".trim($algo["Dia"])."</td>";
$b = $b * (-1);
echo "</tr>";
}

Eso, simplemente, y hace como si le dieras a F5 una y otra vez sin terminar de cargarse nunca.

Una ayudita...

Saludos.
  #5 (permalink)  
Antiguo 26/05/2004, 11:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En teoría tu bucle while() se debe repetir N veces tantos como registros tenga tu "record-set" que obtienes de ejecutar tu consulta SQL vía odbc_exec()

Al usar odbc_fetch_array() .. no sé si puedes acceder al campo concreto por su nombre o sólo podrías hacerlo por su nº de campo correlativo dentro de esa tabla .. (no Uso habitualmente ODBC) .. pero en principio ese no debería ser el problema.

En tal caso te recomiendo ver los ejemplos de este tutorial al respecto:

http://www.phpbuilder.com/columns/si...28.php3?aid=31

El proble de "refrescos" .. podría ser ocasionado por configuración del buffer de salida de PHP .. Lo normal es usarlo:

output_buffering = Off
implicit_flush = Off

Pero si tu las usas a ON ... le estás diciendo a PHP que -siempre- que reciba un dato .. imediatamente lo envie al cliente ... Cuando normalmente PHP trabaja (por configuración "por defecto") enviando todo lo que pre-procese al cliente cuando termina el script (su ejecución).

Puedes ver más información sobre eso en:
http://www.php.net/manual/en/ref.outcontrol.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 26/05/2004, 12:05
Avatar de Christatos  
Fecha de Ingreso: julio-2003
Ubicación: Badajoz, Extremadura, España
Mensajes: 194
Antigüedad: 14 años, 5 meses
Puntos: 0
Hola, Cluster!

Esas dos directivas las tengo a off, que es lo que trae por defecto. De hecho, no lo he tocado nunca.

He probado con Apache, que es lo que yo tengo, con IIS, con la versión 4.3 de php y la 4.1 diferentes combinaciones entre servidores, sistemas operativos y versiones de php...
Resultado: Apache + winxp + php 4.3 (lo que yo tengo) = Error
Lo demás: no:

Apache + Win2000 + php 4.3 = No falla...
IIS + winxp (o 2000) + php 4.1 ó 4.3 = No falla...
He sacado en conclusión que... o es la combinación de XP más Apache más php4.3 o, quizás, sea, más particularmente, la configuración de mi equipo (php.ini, odbc's...)

En definitiva, sigo sin saber qué será, pero por lo menos sé que no está mal el código, sino que hay algo mal configurado en mi equipo, al menos me consuela saber que puedo seguir adelante...

Gracias, sigo a la espera de otras soluciones.
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 00:58.