Foros del Web » Programando para Internet » PHP » Configuración PHP »

Problemas con flush()

Estas en el tema de Problemas con flush() en el foro de Configuración PHP en Foros del Web. Hola, tengo un script que en mi servidor xampp funciona perfectamente, uso siempre el mozilla firefox, asi que problemas del buffer yo ya lo descarto, ...
  #1 (permalink)  
Antiguo 22/12/2010, 05:28
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Problemas con flush()

Hola, tengo un script que en mi servidor xampp funciona perfectamente, uso siempre el mozilla firefox, asi que problemas del buffer yo ya lo descarto,

Código PHP:
Ver original
  1. <?php
  2. $count=0;
  3. for ($x=1;$x<5;$x++)
  4. {
  5. sleep(5);
  6. echo ("5 segundos<br>");
  7. $count=$x*5;
  8. echo ("total de segundos $count<br>");
  9. }
  10. ?>

Tengo el sleep para simular un proceso que tarda 5 segundos, como digo, en el servidor local, lo hace perfectamente cad 5 segundos me envia el mensajito, en cambio en el servidor contratado, envia todo de golpe una vez hace todo el script.

El output_buffer en ambos en phpinfo() me dice el mismo valor "no value", he mirado varias cosas por internet pero sin éxito.

¿que tengo que poner? que tengo que configurar en el php.ini?

gracias.
  #2 (permalink)  
Antiguo 22/12/2010, 07:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problemas con flush()

En el manual explica algunas de las razones por las que eso puede ocurrir:
Cita:
Several servers, especially on Win32, will still buffer the output from your script until it terminates before transmitting the results to the browser.

Server modules for Apache like mod_gzip may do buffering of their own that will cause flush() to not result in data being sent immediately to the client.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 22/12/2010, 07:51
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

Gracias por responder tan rapido, la verdad es que eso ya lo lei en el manual, pero en temas de gestionar un hosting contratado ando perdido, y no tengo ni idea de como se configura el php.ini de este, tengo un archivo php.ini en la raiz de mi directorio web, pero es muy distinto al que tengo en mi servidor local... si me pueden orientar .. gracias
  #4 (permalink)  
Antiguo 22/12/2010, 08:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problemas con flush()

Esa parte que te indiqué muestra que no solo depende de la configuración de tu php.ini; sino del servidor web mismo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 22/12/2010, 08:06
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

pero es que diciendome esto no me dices nada, que hago entonces? porque en temas de configuraciones del sistema php y tal y en sevidores ando pez...
  #6 (permalink)  
Antiguo 22/12/2010, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con flush()

Pues puedes comprobar que modulos tiene instalado tu servidor Web, si tienes Apache quitar la extensión mod_gzip para verificar que no sea eso.

También prueba poner el output_buffering = Off para explícitamente indicar que no haga buffering.

Saludos.
  #7 (permalink)  
Antiguo 22/12/2010, 10:34
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

gracias por contestar, pero eso como se hace con los hostings contratados? es que en esto ando perdido

gracias.
  #8 (permalink)  
Antiguo 22/12/2010, 10:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con flush()

Si no tienes acceso como root o administrador, debes de contactar con el administrador general, de tu sitio para que el lo haga.

Saludos.
  #9 (permalink)  
Antiguo 22/12/2010, 11:18
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

si el administrador del sitio soy yo, pero lo pregunto porque nose hacerlo. En hosting es diferente como lo he hecho siempre en local.. aver si me peuden ayudar o orientar un poco gracias.
  #10 (permalink)  
Antiguo 22/12/2010, 11:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con flush()

Pues si tienes acceso root, revisa en tu httpd.conf (El archivo de configuración de Apache) para ver que extensiones tienes cargadas.

Saludos.
  #11 (permalink)  
Antiguo 22/12/2010, 11:50
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

He mirado en mi directorio web y en una carpeta llamada _db_backups hay un archivo .htaccess (lo más parecido al que tu me has dicho) no hay nada más y este archivo contiene.

Código htaccess:
Ver original
  1. AuthType Basic
  2. AuthName "User Backups"
  3. AuthUserFile /home/content/34/7086334/html/stats/.statspwd
  4. require valid-user
  5. Options +Indexes

el servidor es de godaddy por si ayuda.

gracias de nuevo 1 saludo.
  #12 (permalink)  
Antiguo 22/12/2010, 15:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con flush()

Estas en un servidor compartido, en ese caso no vas a poder mover ninguna configuración de tu servidor web, y tienes que checarlo con el administrador del hosting.

Saludos.
  #13 (permalink)  
Antiguo 22/12/2010, 15:49
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

ok gracias, pero que le digo? que me configure el que? porque habra muchas cosas..
  #14 (permalink)  
Antiguo 22/12/2010, 17:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con flush()

Pues es responsabilidad del hosting que te atiendan a lo que necesitas, si ves lo que te dejo @David checar si tienen el mod_gzip instalado y habilitado.

Saludos.
  #15 (permalink)  
Antiguo 23/12/2010, 04:55
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

hola, he llamado y me ha dicho que el mod_gzip al estar en un hosting compartido no hay possibilidad de que se pueda tocar. Y que si lo que necesito hacer lo puedo hacer por el php.ini que lo modifique alli, que los cambios de este se aplican automaticamente...

¿alguna idea?
  #16 (permalink)  
Antiguo 23/12/2010, 12:51
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

Hola de nuevo, haciendo más pruebas, me he puesto a buscar ejemplos por internet, y me he topado con este.

Código PHP:
Ver original
  1. <?PHP
  2. $buffer = str_repeat(" ", 4096)."\r\n<span></span>\r\n";
  3.  
  4. for ($i=0; $i<25; $i++) {
  5.   echo $buffer.$i;
  6.   ob_flush();
  7.   flush();
  8.   sleep(1);
  9. }
  10.  
  11. ?>

Primaramente lo he probado en mi servidor local de pruebas (Xampp) y posteriormente al ver que funcionaba perfectamente, lo he enviado por ftp al servidor.

Y lo he ejecutado, y he visto que no hacia nada, hasta los 15 segundos, que me ha enviado los primeros 15 numeros y luego los restantes para llegar al 24.

Bueno un buen paso, con este almenos ha enviado una vez, y he pensado, si lo hace cada 15 vueltas, si envio 15 caracteres más.. quizas lo haga como yo quiero. Entonces el script ha quedado de tal forma
Código PHP:
Ver original
  1. <?PHP
  2. $buffer = str_repeat(" ", 61440)."\r\n<span></span>\r\n";
  3.  
  4. for ($i=0; $i<25; $i++) {
  5.   echo $buffer.$i;
  6.   ob_flush();
  7.   flush();
  8.   sleep(1);
  9. }
  10.  
  11. ?>

Lo modifico y lo subo y wala! cada 1 segundo envia el numero correspondiente!.

Entonces esto significara que en mi hosting / php.ini, habra configurada alguan sentencia que indique a cuantos caracteres enviar el buffer o algo asi. no?

Dicho esto, que puedo hacer? he intentado con el ini_set("buffering ","4096"); y nada

gracias!
  #17 (permalink)  
Antiguo 23/12/2010, 16:46
 
Fecha de Ingreso: diciembre-2010
Mensajes: 61
Antigüedad: 13 años, 4 meses
Puntos: 4
Respuesta: Problemas con flush()

Pon este código al principio de la página:

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);


Algo así:

Código:
<?PHP
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);	

echo str_repeat(' ', 300); //buffer para IE
 
for ($i=0; $i<25; $i++) {
  echo $i;
   flush();
  sleep(1);
  
}
 
?>

Saludos

Última edición por yop289; 23/12/2010 a las 16:56
  #18 (permalink)  
Antiguo 24/12/2010, 03:38
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

buenas, con este codigo lo que me pasa es que en el servidor cuando lo ejecuto directamente se pone la pagina en blanco, sin ni siquiera hacer el bucle de 24 segundos ni na, en cambio en mi server local en (xampp) si hace lo correcto. Si en teoria ya me funciona, lo unico que en cambio de enviar el buffer en 61440 hacerlo en menos, ya que sino envio demasiado, como ya he dicho he probado con ini_set("buffering ","4096"); y nada. Gracias
  #19 (permalink)  
Antiguo 24/12/2010, 05:12
 
Fecha de Ingreso: diciembre-2010
Mensajes: 61
Antigüedad: 13 años, 4 meses
Puntos: 4
Respuesta: Problemas con flush()

Hola, te pongo el link donde he puesto el código que te comento para que veas que funciona:

Funciona para Firefox
No funciona para Safari, Chrome

http://www.davidamodia.com/flush.php

Funciona para Firefox, safari, Chrome

http://www.davidamodia.com/flush2.php


¿Dónde alojas la página?


El siguiente código funciona para safari,Chrome y Firefox

Código PHP:

<?php
@apache_setenv('no-gzip'1);
@
ini_set('zlib.output_compression'0);    

//ob_start();

//ob_implicit_flush(true);


date_default_timezone_set('Europe/Madrid');
//repeticiones
$secs=10;

   
// $secs = (int) $secs;
    
$buffer str_repeat(" "4096);
    
//echo $buffer."\r\n<br />\r\n";
    
for ($i=0$i<$secs$i++) {
        echo 
date('l jS \of F Y h:i:s A');
        echo 
"(".($i+1).")\r\n<br />\r\n".$buffer."\r\n<br />\r\n";
       
// ob_flush();
        
flush();
        
sleep(1);
        
//usleep(1000000);
    
}


//ob_end_flush();
?>






Un Saludo

Última edición por yop289; 24/12/2010 a las 05:53
  #20 (permalink)  
Antiguo 24/12/2010, 06:18
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

hola gracias, pues lo tengo en godaddy, y este codigo ami no me funciona, me sale la pagina en blanco al momento, el codigo que me funciona es


Código PHP:
Ver original
  1. <?PHP
  2. $buffer = str_repeat(" ", 61440)."\r\n<span></span>\r\n";
  3.  
  4. for ($i=0; $i<25; $i++) {
  5.   echo $buffer.$i;
  6.   ob_flush();
  7.   flush();
  8.   sleep(1);
  9. }
  10.  
  11. ?>

pero enviando demasiados caracteres en blanco, por eso pedia si hay algo para cambiar eso

Última edición por lmerli; 24/12/2010 a las 06:28
  #21 (permalink)  
Antiguo 27/12/2010, 09:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con flush()

Como te comentaron más arriba la directiva es output_buffering, tienes que ponerla como Off ya que por defecto esta en 4096 (4KB):
Cita:
; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering during runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = Off
Si en tu hosting te permiten modificar tu php.ini solo agrega esa directiva como Off y no tendras que enviar nada de contenido antes.

Saludos.
  #22 (permalink)  
Antiguo 29/12/2010, 15:14
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

Gracias por responder, en mi php.ini ya probé de poner esa sentencia, incluso en mi archivo php con el ini_set y nada de nada, sigo teniendo que obligar a poner esa cantidad de espacios para que el buffer me funcione a cada vuelta, y nose si es a consequencia de esto o no, pero el bucle si uso por ej un numero alto de datos por ej 300 sobre 210 y algo se me para con error 200 OK
  #23 (permalink)  
Antiguo 07/01/2011, 07:08
 
Fecha de Ingreso: junio-2006
Ubicación: España
Mensajes: 122
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Problemas con flush()

Hola, usaba un código parecido al ejemplo que tengo al mensaje #20. y me funcionaba perfectamente, pero hoy ya no me tira, no me envia la información de flush, y tengo que esperar a que cargue todo el script.

¿que sentido tiene?

Etiquetas: Ninguno
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 17:58.