mam problem zde na webzdarma. jednoduchy skript:
ob_start();
echo "asdf";
flush(); ob_flush(); flush(); // jen pro jistotu - nevim co ma prijit driv
sleep(2);
echo "ghjk";
flush(); ob_flush(); flush();
sleep(2);
echo "poiu";
ob_end_flush();
se na me s prominutim uplne vykasle..
stranka se zobrazi az po 4 sekundach a uz uplne cela. navic podle ob_get_level() sem vydedukoval, ze by tam zadne jine bufferovani byt nemelo, ale ob_list_handlers() vraci "default output handler" (i pred zavolanim ob_start)
v .htaccess sem si nastavil output_buffering na off. dochazi mi napady, kde by mohl byt dalsi zadrhel... nejake navrhy? nema wz jeste nejake vlastni bufferovani na serverove strane? diky
"nejake navrhy?"
1) Přečti si PHP manuál: http://cz.php.net/manual/cs/function.flush.php
a hlavně http://cz.php.net/manual/cs/function.sleep.php!
2) Tohle patří do fóra PHP a ne do podpory...
manual samozrejme ctu, bez toho bych si ani nedovolil sem psat. ale co konkretne bych mel v manualu videt? zeby toto?
"Poznámka: flush() nemá žádný účinek na bufferovací schéma vašeho webserveru nebo browseru na klientské straně."
hmm to sem si taky precet. a prave proto sem nepsal do fora PHP, ale sem, protoze tim padem jde o nastaveni webserveru. doma mi uvedeny priklad dela presne to, co by mel. tedy jeste jednou.. moje otazka spociva v tom jak tento priklad zprovoznit ZDE na webzdarma. dekuji za pomoc.
Dobře, pokud č. 2:
Tvůj "problém" může mít několik příčin:
1) "doma" znamená na Win? Vítej na Linuxu ;)
2) If flush is not working probably mod_gzip is enabled. To disable it just add following lines to .htaccess
<IfModule mod_gzip.c>
mod_gzip_on no
</IfModule>
3) http://cz.php.net/manual/en/function.time-sleep-until.php
4) tebou citovaná pasáž z manuálu
atd, atd, ...
... s kravinama typu sleep() si naštěstí nehraju (zbytečný zpomalení), takže si budeš muset s výše sepsaným poradit sám ;)
ok.. lidi, co pomahaji stylem "tady mas odkaz, ja se takovyma kravinama nezdrzuju" uplne zboznuju.
ad 1.) hmm, to by bylo asi poprve, co by na linuxu nefungovalo neco, co na win funguje. (namet na ciste filozofickou diskusi) nicmene co se tyce uvedeneho prikladu, neni v nem zadna funkce, ktera by byla (podle manualu) rozdilna na win a linuxu
ad 2.) jo, diky, toho sem si nevsim, takze bez ironie.. diky. nicmene, bohuzel nepomaha.. ostatne phpinfo na wz:
"Loaded Modules
core mod_access mod_auth mod_log_config mod_env mod_setenvif worker http_core mod_mime mod_autoindex mod_vhost_alias mod_negotiation mod_dir mod_actions mod_alias mod_so mod_deflate mod_status sapi_apache2 mod_logio mod_rewrite mod_auth_digest mod_perl"
ad 3.) funkci time_sleep_until jsem nepouzil.. mam zase neco videt?
ad 4.) ano, to je prave to, co bych rad vedel.. jestli je zde na wz nejaky buffer navic a jak ho obejit.
jeste na vysvetlenou, proc potrebuju zprovoznit flush().
napsal sem si skript na PHP galerii, ktery projde zadany adresar, najde v nem obrazky, vytvori k nim zmenseniny (pokud jeste nejsou vytvorene) a zobrazi galerii.. generovani zmensenin je docela casove narocna operace, zvlast kdyz pridavam hodne novych obrazku, pro ktere jeste nemam zmeseniny hotove. proto sem chtel pridat neco jako progress bar, ktery by informoval o prubehu, aby to nevypadalo, ze se 30 sekund nic nedeje. mam v planu to delat pomoci
<div id="neco">zbyva xx fotek</div>
flush();
// generovat
<script>
document.getElementById("neco").innerHTML = "zbyva xy fotek"
</script>
flush();
// generovat
<script> ....
uvedeny priklad s sleep jsem uvadel jen pro ilustraci casove narocne operace, princip je vsak stejny.
uff... priste budu strucny.. slibuju
Tak na to jsou i lepší metody než PHP. Zkus se mrknout po AJAXu a podobných technologiích fungujících (i) na straně klienta.
No a nebo něco jako:
1) před spuštěním generování náhledů pošli začátek stránky, kde bude JS, který bude "kontrolovat" data přicházející od serveru
2) po každé zpracované fotce odešli k uživateli data, která si JS přebere a upraví nějaký ten tvůj statusbar. (napřílad: odešleš <div name="20"></div> => JS udělá změnu statusbaru: zbývá 20 fotek.)
Už jsem to někde viděl fungovat (BTW: dost dobře), ale už nevím kde. Pokud to najdu, dám link...
Suma sumárum:
+ jednoduché a přitom funkční
+ nepotřebuješ složité PHP
Jo aha ... neumim číst ;)
Tak proč to testuješ takhle? Proč nenecháš vygenerovat hodně dlouhou stránku (pro testování několik stovek kb náhodného "marastu") a na ní to zkoušíš?
jo, nad ajaxem sem taky premyslel. urcite to je jedna z moznosti, chtel sem si to jen nejdrvi zkusit pomoci PHP, protoze AJAX bych se musel teprve zacit ucit.
ten tvuj druky navrh ale taky musi pouzivat flush, takze bych pravdepodobne narazil na stejny problem.
tu dlouhou stranku nahodnych dat vyzkousim. pak sem napisu vysledek pokusu.. zatim diky.