Foros del Web » Programando para Internet » PHP »

Contar hasta tres

Estas en el tema de Contar hasta tres en el foro de PHP en Foros del Web. El script completo es, lógicamente, mas largo (y mas útil) pero el problema es el siguiente. Tengo un bucle... for ($i = 1; $i <= ...
  #1 (permalink)  
Antiguo 22/08/2007, 14:16
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Contar hasta tres

El script completo es, lógicamente, mas largo (y mas útil) pero el problema es el siguiente.

Tengo un bucle...

for ($i = 1; $i <= 3; $i++) {
}

...y dentro del bucle muestro los numeritos...

for ($i = 1; $i <= 3; $i++) {
echo ($i . "<br>");
}

...pero esto corre mucho, así que le pongo una pausa...

for ($i = 1; $i <= 3; $i++) {
echo ($i . "<br>");
sleep(1);
}

...pero la puñetera página se queda en blanco tres segundos (mas lo que tarda en hacer el "trabajo") y luego pone:

1
2
3


He probado a usar flush() ob_flush() y todos los demas "flushes" que he encontrado en el manual pero nada.
En ASP no tengo ese problema... pero en ASP no tengo "sleep"



¿Alguna idea al respecto?
  #2 (permalink)  
Antiguo 22/08/2007, 14:37
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Tenés que tener activada la directiva output_buffering en el php.ini (fijate haciendo un phpinfo en que estado está actualmente), no solo activada, sino que con un valor binario que puede ser 4096. Si aún así no funciona, fijate que no tegas activado gzip, el cual juega en contra.

EJ:
output_buffering = 4096;
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 22/08/2007, 14:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Contar hasta tres

Si te esta saliendo todo despues de 3 segundos puede ser que en tu php.ini tengas implicitamente activado el output buffering y por ende la pagina se queda quieta por 3 segundos y luego lanza la salida.

Necesitas checar que la directiva output_buffering este desactivada y a lo mejor probar algo asi:
Código PHP:
for( $i 1$i <= 3$i++ ) {
      echo 
$i "<br />";
      
flush();
      
sleep);

Saludos.
  #4 (permalink)  
Antiguo 23/08/2007, 15:14
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Desacuerdo Re: Contar hasta tres

Estimado nicolaspar,

Probado php.ini con
output_buffering = 4096;

Sigue sin funcionar . En cuanto a gzip (activado o no) ni idea ¿como lo desactivo?.





Estimado GatorV,

Lo del flush ya lo he probado en todas sus variantes con el mismo resultado .
  #5 (permalink)  
Antiguo 23/08/2007, 15:36
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Tenes que poner en off el mod_gzip. Buscalo en el php.ini y contanos si te funciono, puede que haya otra directiva que este molestando.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 24/08/2007, 02:42
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

Ahora php.ini tiene:

output_buffering = 4096;
mod_gzip = off;


Sigue igual
  #7 (permalink)  
Antiguo 24/08/2007, 07:21
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Que código estas usando? Estaría bueno que lo postees ;) y de ser posible dejes un ejemplo online con un error_reporting(E_ALL) puesto en el archivo.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 24/08/2007, 13:56
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

Gracias por tu interés en el asunto

El ejemplo puedes verlo en http://www.tonyg.net/123.php

El código es:

Código PHP:
<?php
error_reporting
(E_ALL);

for (
$i 1$i <= 3$i++) {
    echo (
$i "<br>");
    
flush();
    
sleep(1);
}
?>
El php.ini es:

Código PHP:
output_buffering 4096;
mod_gzip off

Triste destino el mío

Donde me funciona el flush no tengo sleep.
Donde tengo sleep no me funciona el flush


Parece algún tipo de poesía moderna (jeje)
  #9 (permalink)  
Antiguo 24/08/2007, 14:08
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Intenta con:
Código PHP:
ob_end_flush();
for( 
$i 0$i<3$i++ ){
    echo 
$i
    
ob_flush();
    
sleep(1);

Siempre deshabilito y vuelco antes de usarlo, y uso ob_flush, fijate a ver que te dice con eso y contame.

Edit, a mi me funciono bien: http://estudiowas.com.ar/testBuffer.php
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 24/08/2007, 15:53
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

¡Oh! ¡Oh! Esto es mas grave de lo que pensaba.
He probado tu testBuffer.php y he aquí los resultados:

Internet Explorer 7
Netscape 8.1
Opera 9
Firefox 2

¿Depende entonces del navegador? Si es así estamos perdidos.
  #11 (permalink)  
Antiguo 24/08/2007, 16:00
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Funciona, el tema es que IE, hasta que no recibe 256 caracteres no escribe.

Ah!, no me crees?, mirá, le agregue código fuente y funciona:


http://estudiowas.com.ar/testBuffer.php


Edit; me olvide de opera, opera necesita que cada flush tenga al menos esos 250 caracteres (creo que en opera eran 250). Intenta en vez de hacer un echo $i; de hacer un echo de un string de más de 250 caracteres.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #12 (permalink)  
Antiguo 25/08/2007, 02:45
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

¡Fantástico! Ahora sólo falta que lo haga funcionar yo .

Código PHP:
<?php
echo "Lorem ipsum...";
ob_end_flush();
echo 
"Lorem ipsum...";

for( 
$i 0$i<3$i++ ){
    echo 
$i "<br>"
    
ob_flush();
    
sleep(1);
}  
?>
He puesto el "Lorem ipsum" antes, después y a ambos lados de ob_end_flush() y sigue sacándolo todo de una vez.

http://www.tonyg.net/123.php


Perdona por el abuso de tu tiempo, pero ¿podías ponerme el código completo de tu testBuffer? ¿Alguna indicación mas sobre php.ini?
  #13 (permalink)  
Antiguo 25/08/2007, 07:38
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Que raro. Mi código es todo lo que te postié (luego le agrege el lorem, nada más).
Yo lo uso mucho, sobre todo para preloads de procesos largos, y siempre que esta apagado lo prendo con eso.
Ahora, hay otras cosas que afectan y son las directivas de flush yo tengo:
implicit_flush = Off
Esta es la que jode que no se si la cambiaste:
zlib.output_compression = Off

Nada mas que me de cuenta.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #14 (permalink)  
Antiguo 13/09/2007, 07:51
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

Ausente durante unos días por asuntos personales vuelvo a la carga.

El contenido de php.ini es

Código PHP:
implicit_flush off
output_buffering 
on
zlib
.output_compression off 
Lo sigue sacando todo de golpe a los tres segundos

¿Qué *** está fallando?

Saludos
  #15 (permalink)  
Antiguo 13/09/2007, 08:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Contar hasta tres

Pasa:
Código:
output_buffering = on
a Off. e intenta de nuevo.

Saludos.
  #16 (permalink)  
Antiguo 13/09/2007, 14:35
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

output_buffering = off

Sigue sin funcionar


Necesito poner esto en marcha porque la solución que, provisionalmente, le he dado a base de procesar por lotes e insertar las pausas mediante JavaScript me está dando problemas cuando se produce algún error
  #17 (permalink)  
Antiguo 13/09/2007, 14:56
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Intentaste con un valor Bit?:
output_buffering = 4096

O 8192....

Intentaste de testearlo en otro servidor?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #18 (permalink)  
Antiguo 13/09/2007, 17:36
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
De acuerdo Re: Contar hasta tres

Cita:
Iniciado por nicolaspar Ver Mensaje
Intentaste de testearlo en otro servidor?
Hay una página que hice hace mucho tiempo... Está en un servidor distinto (el que tenía mi cliente en ese momento). He puesto el script ahí y...

...FUNCIONA...

Por favor pasad a verlo:

http://www.polifibra.es/123.php
(si alguien quiere una piscina... jeje)

La diferencia es que este es un sevidor Unix mientras que el mío (donde tengo todos mis trabajos) es un servidor Windows.

¿Qué ocurre? ¿No se comportan igual los PHP's en ambos sistemas operativos?

Puedo ponerme en contacto con los técnicos de mi servidor. Los tengo acostumbrados a "darles la lata" con inmumerables asuntos y son gente bastante competente.
¿Como les planteo el asunto? Mi experiencia en PHP es nula (esto es lo primero que hago). ¿Que información podríais necesitar para ayudarme?


Gracias por vuestro tiempo y dedicación
Atentamente
Tony.G
  #19 (permalink)  
Antiguo 14/09/2007, 08:24
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Yo lo uso sobre windows perfectamente. Hay alguna configuración que tenes rara. Yo que vos, si es en tu maquina que te esta pasando esto, instalo php nuevamente.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #20 (permalink)  
Antiguo 14/09/2007, 08:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Contar hasta tres

O en su caso sube un phpinfo() a ambos servidores, y visualiza las diferencias, asi podras encontrar donde tienes el error y que directiva cambiar.

Saludos.
  #21 (permalink)  
Antiguo 14/09/2007, 08:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Contar hasta tres

Adicionalmente te recomiendo leas esto:

http://forums.iis.net/t/1078563.aspx

Si tu server windows estan usando IIS, tienes que enviar mas de 1 MB de datos antes de que la respuesta se pueda usar con buffering.

Saludos.
  #22 (permalink)  
Antiguo 14/09/2007, 09:54
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Contar hasta tres

Yo estoy usando IIS acá (no en el ejemplo que le deje) y funciona sin el 1mb de datos, aunque es iis 5 y php está como módulo, tal vez o la versión o la forma en que este instaldo php puede causar lo que decís.

No sabía ese dato, lo tendré en cuenta!;)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #23 (permalink)  
Antiguo 14/09/2007, 15:39
Avatar de TonyG  
Fecha de Ingreso: mayo-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Contar hasta tres

Ahí van los phpinfos.

Hay tantas cosas que no se donde mirar.

Donde funciona:
http://www.polifibra.es/info.php

Donde funciona:
http://www.tonyg.net/info.php


Por favor, echadles un vistazo y decidme vuestra opinión.


Saludos desde Extremadura
  #24 (permalink)  
Antiguo 14/09/2007, 16:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Contar hasta tres

Pues al parecer esta bien (igual), pero la diferencia es que en uno usas IIS6, y en el otro Apache, si ves el link que deje dice que tienes que enviar 1 MB de datos para que puedas hacer el buffering, te recomiendo le heches un ojo.

Saludos.
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 12:08.