![]() |
![]() ![]() |
![]() |
![]() ![]()
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.: 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 :-) |
|
|
![]()
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
|
|
|
![]()
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
![]() ![]() -------------------- 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
|
|
|
![]()
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. |
|
|
![]()
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 ![]() |
|
|
![]()
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
|
|
|
![]()
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 :-)
|
|
|
![]()
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.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 07:27 |