Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Długa pętla i postęp
elipsa
post 27.04.2010, 19:10:30
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


Witam,

zastanawia mnie czy jest coś takiego możliwe. Nie bardzo wiem, jak to nazwać, dlatego spróbuję opisać. Gdy mamy jakaś pętlę, która bardzo długo wykonuje jakieś operacje, to jej wynik wyświetli się dopiero po zakończeniu całej pętli. A czy można byłoby tak zrobić, że częściowe wyniki pętli pojawiałyby się na ekranie jeszcze w trakcie jej wykonywania? Mamy np.:

  1. for($i=0; $i<=100000; $i++) {echo($i."<br />\n");}


Po wykonaniu pętli pojawi się słupek liczb od 1 do 100000. A czy można by zrobić, żeby w trakcie wykonywania pętli na ekranie kolejno pojawiały się liczby, w miarę jak pętla je generuje?

Pozdrawiam :-)
Go to the top of the page
+Quote Post
tehaha
post 27.04.2010, 19:23:13
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


musiałbyś wykorzystać technologie po stronie użytkownika czyli javascript, ajax lub biblioteka jQuery, php działa po stronie serwera więc takiego efektu nie osiągniesz
Go to the top of the page
+Quote Post
thek
post 27.04.2010, 21:02:57
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zawsze też może kombinować z flush i ob_flush smile.gif Zależy co skrypt ma robić smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
nu_moon
post 27.04.2010, 22:03:05
Post #4





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


flush/ob_flush nie zadziała, bo jedyne co to zmienia to buforowanie wyjścia.
Tak jak kolega napisał, jedynym sensownym rozwiązaniem jest użycie JS.
Go to the top of the page
+Quote Post
uirapuru
post 28.04.2010, 07:46:20
Post #5





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


ostatnio podobny problem miałem, funkcja w pętli po każdej iteracji robiła file_put_contents("plik.txt",$jakis_tam_wynik). Z kolei był osobny kontroler_ajax.php, który wyswietlal zawartosc tego pliku. w pętli co kilka sekund był odpytywany przez skrypt JS, a jego wynik był wstawiany w <div> na stronie.

Nie wiem na ile to eleganckie, ale działa smile.gif
Go to the top of the page
+Quote Post
thek
post 28.04.2010, 08:39:23
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




nu_moon... Użycie flush/ob_flush w zależności od sytuacji daje wymagane rezultaty. Wiele osób jednak myśli w sposób sekwencyjny. Webowe aplikacje najczęściej tak działają, ale można je próbować zrównoleglić, choć nie jest to proste i nieraz jest to niemal niemożliwe. Wiele zależy od samego pomysłu. Przykładowo weź sobie zrób pętlę ze sleepem 500 i spróbuj wyświetlić numer kroku. Normalny skrypt wyświetli wszystko po zakończeniu skryptu. Użycie ob/ob_flush pozwala to robić "na bieżąco" poprzez wywołanie czyszczenia bufora wewnątrz pętli.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
elipsa
post 3.05.2010, 22:16:16
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


OK, dzięki za sugestie, ten pomysł z flushami chyba będzie w moim wypadku najlepszy :-)
Go to the top of the page
+Quote Post
nemis
post 3.05.2010, 23:03:12
Post #8





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Możesz też zamienić tą pętla na funckje rekurencyjną. Jeśli nie używasz frameworka, który bawi się w ob_start, wszystko wyświetlane będzie w czasie rzeczywistym.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:27