[PHP] Stopniowe wyświetlanie skryptu -dlugi czas wykonywania

0

Witam po raz kolejny:)
Tym razem nie wiem jak w PHP zrobic takie cos zeby stopniowo pokazywalo strone w trakcie parsowania kodu..
tj:

echo 'poczatek<br>';
/* jakies obliczenia, bazy danych, czy cos jeszcze co trwa np 20 sekund */
echo 'czesc druga<br>';
/* znowu obliczenia */
echo 'juz niedlugo<br>';
/* ... */
echo 'wszystko zostalo wykonane!';

Cos z ob_ ?
czy jakos inaczej?
na free hostingu of.pl to jest jakby wbudowane w apachea, bo co jakies 5 sekund automatycznie dodaje juz wygenerowana tresc, ja szukam jakis funkcji w php..

pozdrawiam

0

flush, ale dane moga nie dotrzec, bo beda czekac w nizszej warstwie sieciowej, az pakiet bedzie mial pewien rozmiar (nie ma sensu wysylac masy malych pakietow).

0

konkretami jak mozesz :) tj np przerób wyzej podany moj skrypt, dopisując jak to powinno wygladac..

póki co wykonuje na localhoscie, czekam 25 minut jak na razie, tresc ma ok 5KB, i wciaz ani widu, ani slychu jak to mowia :P

0

z tego co mi wiadomo,to w PHP nie da sie wykonać takiej rzeczy.
tak jak powiedział nav: pakiety mogą nie dotrzeć.

0

cos wymyslilem:)
polacze to z JS i będzie git:)

echo str_repeat(" ", 256);
$i = 100;
echo '<div id="x"> nic </div>';
echo '<script language="javascript">
function xd(i){
	document.getElementById("x").innerHTML = i;
	return true;
}
</script>';

while($i > 0)
{
   echo "<script>xd('$i')</script>\r\n ";
   $i--;
   flush();
   ob_flush();
   sleep(1);
}

edit:
z tym ze to nie wszystko :/ ale to opisze w nastepnym topicu zeby nie mieszac

0
yelon napisał(a)

z tego co mi wiadomo,to w PHP nie da sie wykonać takiej rzeczy.

Twoja sygnatura:

sygnatura napisał(a)

Nigdy nie mów NIGDY

hehe, sorry za OT ;P

0
dzek69 napisał(a)
yelon napisał(a)

z tego co mi wiadomo,to w PHP nie da sie wykonać takiej rzeczy.

Twoja sygnatura:

sygnatura napisał(a)

Nigdy nie mów NIGDY

hehe, sorry za OT ;P

a gdzie ty tam widzisz słowo "nigdy" ? :|
poza tym naucz sie edytować posty

0
jjiji napisał(a)

a gdzie ty tam widzisz słowo "nigdy" ? :|
poza tym naucz sie edytować posty

"nie da się" to prawie to samo, taka przenośnia..
umiem edytowac posty, co widac w poscie powyzej, ale uznaję zasade ze jak pisze na inny temat to nie wrzucam tego w ten sam post..
pozdro anonimie

0

Rozwijajac to co zaznaczyl nav: mozesz zmuszac php do wyslania czesci danych (flush), ale to jak beda potraktowane po drugiej stronie zalezy od:

  1. Przegladarki - np. ie zwykle czeka na calosc.
  2. Obslugi sieciowej czyli zachowania poszczegolnych warstw (w tym wymienionej juz przegladarki) - np. sterownik sieciowy poczeka, az uzbiera sie powiedzmy 1kB az posle to w gore (system->przegladarka).

I od paru innych rzeczy pewnie tez. Sprawe zalatwisz calosciowo np. AJAXem wykorzystujac jakis bufor informacyjny o postepie. Przykladowo:

  1. AJAX wywoluje żądanie odpalajac konkretny skrypt php
  2. Skrypt sobie dziala (odpowiedz na żądanie AJAXa wisi) i co jakis czas zapisuje np. w bazie stan prac.
  3. Osobne żądanie AJAX aktualizuje pasek postepu na podstawie danych z bazy.

W ten sposob otrzymujesz rozwiazanie odporne na rozne zachowanie poszczegolnych elementow i do tego w miare skalowalny. Co do drugiego to zwroc uwage, ze wiekszosc serwerow www, zwykle po 30s anuluje żądanie i zwroci timeout. Oczywiscie w przypadku normalnego wywolania strony, czyli tak jak planowales oryginalnie.

0

dzięki johny za takie szczegolowe info,
ale ten problem juz rozwiazany, byłbym wdzieczny za odpowiedz tu:
http://4programmers.net/Forum/viewtopic.php?id=135799
:)
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1