PDA

Pogčedajte punu verziju : flush() i ob_flush() problem?


mega023
24. 11. 2005., 21:55
imam sledeci problem...
jedan radnja koja se obavlja u php-u traje malo duze (desetak sekundi)
i hocu da napravim da u toku tog procesa korisnik dobija neke rezultate u toku rada cisto da zna da se "nije zaglavilo". Znaci da se ispisuju reed po red svakih sekundu/dve dokle je stigao....

citao sam da se to moze uraditi sa flush/ob_flush,
ali meni to nikako ne radi...

probao sam sve primere sa
http://www.php.net/manual/en/function.flush.php

ali nista ne radi....

ima li ko iskustva sa ovim?

BTW: koristim set_time_limit(0); da nebi doslo do timeout-a.

bluesman
24. 11. 2005., 22:20
Ne znam zasto nebi radilo, probaj obican primer:

$echo "1";
flush();
sleep(1);
$echo "2";
flush();
sleep(1);
$echo "3";
flush();
sleep(1);
$echo "goovo";


To bi trebalo da radi uvek... a ako koristis ob, onda bi trebalo da ob_flush() radi slicno.

mega023
24. 11. 2005., 22:36
ne radi

izbaci mi samo 123govno :)

btw: cemu sluzi $ ispred echo?

Ne znam zasto nebi radilo, probaj obican primer:

$echo "1";
flush();
sleep(1);
$echo "2";
flush();
sleep(1);
$echo "3";
flush();
sleep(1);
$echo "goovo";


To bi trebalo da radi uvek... a ako koristis ob, onda bi trebalo da ob_flush() radi slicno.

bluesman
24. 11. 2005., 22:40
ups... izgleda da sam mnogo poludeo zbog utakmice... puče mi tiket od 43 000 dinara zbog zvezde...

Bez $ naravno.

Primer je bio da istestiraš flush() funkciju

echo "1";
flush();
sleep(1);
echo "2";
flush();
sleep(1);
echo "3";
flush();
sleep(1);
echo "gotovo";


trebalo bi na svaki sekund da ti se pojavljuje 1, 2, 3... gotovo.

Ma šta ja njamke... idem bre da spavam. :)

mega023
24. 11. 2005., 22:42
ma zanam to... ali nije...
pojavilo se sve odjednom....

(imas li ICQ/MSN da ti dam URL da isprobas)

zekica
25. 11. 2005., 09:52
A zasto ne probas da pre funkcije flush pozoves ob_end_flush() (samo prvi put)?

Mislim da ce tako raditi...

mega023
25. 11. 2005., 11:55
A zasto ne probas da pre funkcije flush pozoves ob_end_flush() (samo prvi put)?

Mislim da ce tako raditi...


ne radi ni tako....

noviKorisnik
25. 11. 2005., 12:26
U dokumentaciji piše
flush() has no effect on the buffering scheme of your webserver or the browser on the client side. Thus you need to call both ob_flush() and flush() to flush the output buffers.
Tako da ovo radi
<?php
$ekhm = 0;
for (;;)
{
sleep (1);
echo ++$ekhm . "<br />\r\n";
ob_flush ();
flush();
}
?>

noviKorisnik
25. 11. 2005., 12:31
E da, naravno, sleep () je ovde samo za demonstraciju. Nego - šta je uzrok izvršavanja skripte od desetak sekundi?

mega023
25. 11. 2005., 12:54
ma izgleda da to sve i radi
nego kod mene je izgleda problem u konfiguraciji apache-a ili u upotrebi gzipa

upravo sam isprobao na drugom serveru i sve radi normalno...
sada me zanima jos kako da to sredim/ugasim....


evo sta kaze php.net:
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.


e sad da li je do mod_gzip-a ili do Zend-a nisam siguran
ali mi se cini da je do mod_gzip-a

mega023
25. 11. 2005., 13:03
EVOOOOO REEEEESEEEEEEENJAAAAAAAA!!!

I'm ****IN' GENIOUS!!!!

Dodao sam ovo u .htaccess da bi iskljucio mod_gzip za samo taj sajt
i sve radi normalno!!!


<IfModule mod_gzip.c>
mod_gzip_on no
</IfModule>

ivanhoe
26. 11. 2005., 00:33
a mogao si i da umesto mod_gzipa koristis ob_gzhandler, pa bi ti radio i ob_flush

dinke
25. 09. 2006., 17:48
a mogao si i da umesto mod_gzipa koristis ob_gzhandler, pa bi ti radio i ob_flush
Ajd please prijavi kako, posto kod mene nijedna varijanta ne radi (iskljucivanje mod_gzip-a u .htaccess verovatno ne radi jer je server API CGI).

edit:
U stvari on ga uspesno iskljuci (proverio u response headerima) ali flush i dalje ne radi.

Evo koda koji koristim kao test:

www.lampix.net/flush.php

<?php
$ekhm = 0;
for ($i=0;$i<10;$i++)
{
sleep (1);
echo ++$ekhm . "<br />\r\n";
ob_flush ();
flush();
}
?>

ivanhoe
25. 09. 2006., 21:10
ehm, izgleda nece pod linuxom, sad sam probao. Pod windowsom (Apache/2.0.52 + php 4.3.11) mi radi bez problema, ispisuje cifru po cifru.

BluesRocker
25. 09. 2006., 21:52
Radi na Lindži. Apache 2.0.53, php 4.3.10.

dinke
25. 09. 2006., 22:46
Ma radi i meni na lindži, windži, bsd-u itd. ali na dreamhostu neće da ga *ebeš.

Nadjoh ovo na njihovo wikiju:

http://wiki.dreamhost.com/index.php/PHP

Output Buffer Cache

PHP functions flush(), ob_flush(), and ob_implicit_flush() will have no apparent effect on DreamHost. For performance reasons on a DreamHost shared host, output is buffered at a higher level than PHP (mod_gzip) and so these commands do not have any visible effect. If you need unbuffered output, you must contact Tech Support to request mod_gzip be disabled for your site.

E sad, mene zbunjuje sto sam poprilicno siguran da je onaj .htaccess odradio posao (sudeci po response headerima) ali nista od slanja outputa.