Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Opóźnienie w pętli
kamilw
post 28.12.2007, 19:24:46
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


Witajcie,
Mam spory problem. Zrobiłem sobie pętle while. Generuje ona linie teksty. Chciałbym ją trochę opóźnić tz. pętelka wykona się raz poczeka x sekund i następnie znowu wykona. I tak w kółko. Czy jest to możliwe? Jeśli tak to jak?

Z góry dziękuje za pomoc.
PS. Szczęśliwego Nowego Roku.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
czachor
post 28.12.2007, 19:27:51
Post #2





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


sleep()

Tylko nie wiem, co oznacza "w kółko", bo jak użytkownik wyłączy przeglądarkę, to pętla też skończy swoje.


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
kamilw
post 28.12.2007, 19:42:22
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


Mój Drogi opóźnia. Tylko gdy uruchomie skrypt to wszystkie opóźnienia są generowane. A dopiero potem wyswietlają się dane z pętli.
Ja chciałybym inaczej
Żeby każde powtórzenie wyświetliło tekst i poczekało x sekund.
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 20:08:50
Post #4





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Z tego co się orientuję, to niestety w PHP to nie jest realne.


--------------------
Go to the top of the page
+Quote Post
kamilw
post 28.12.2007, 20:13:05
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


Jeśli w php nie. To w jakim języku? javascript?
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 20:16:03
Post #6





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Tak, javascript. Tam masz konstrukcje window.setTimeout i window.setInterval, odsyłam do wyszukiwarki po więcej informacji.


--------------------
Go to the top of the page
+Quote Post
Liko
post 28.12.2007, 20:27:06
Post #7





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


Cytat(Hazel @ 28.12.2007, 20:16:03 ) *
Tak, javascript. Tam masz konstrukcje window.setTimeout i window.setInterval, odsyłam do wyszukiwarki po więcej informacji.


Ja również odsyłam po więcej informacji Ciebie do manuala PHP.

Kod w PHP:
  1. <?php
  2. for($iFoo = 0; $iFoo <= 10; $iFoo++) {
  3.  
  4. printf("Int: %s <br />", $iFoo);
  5. flush();
  6. sleep(4);
  7.  
  8. }
  9.  
  10. ?>
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 20:32:31
Post #8





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Przykro mi, ale to tak nie działa. Wyświetla się wszystko naraz po 10x sekund, gdzie x to argument sleep().
A faktycznie jedynym sposobem na to, żeby strona wyswietlała się dynamicznie, jest używanie JavaScriptu.

Ten post edytował Hazel 28.12.2007, 20:33:30


--------------------
Go to the top of the page
+Quote Post
Liko
post 28.12.2007, 20:35:43
Post #9





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


Przykro mi to Ci mówić, ale działa. Lecz jeżeli używasz IE to musisz wysłać 256 bajtów wcześniej abyś zobaczył efekt. A więcej masz w dokumentacji:
Cytat
Several servers, especially on Win32, will still buffer the output from your script until it terminates before transmitting the results to the browser.

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.

Even the browser may buffer its input before displaying it. Netscape, for example, buffers text until it receives an end-of-line or the beginning of a tag, and it won't render tables until the </table> tag of the outermost table is seen.

Some versions of Microsoft Internet Explorer will only start to display the page after they have received 256 bytes of output, so you may need to send extra whitespace before flushing to get those browsers to display the page.


Mam nagrać Tobie film i pokazać localhosta?
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 20:40:21
Post #10





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Nie wiem w czym leży problem, ale pod żadną przeglądarką nie działa tak jak powinno. Filmu nagrywać nie musisz, wierzę Ci, ale niestety u mnie nie działa nigdzie. Sprawdzałem pod FF, Operą, IE, Safari, Flock i wiecej mi się nie chciało. Po prostu u mnie to nie działa. Ani pod PHP 5, ani pod PHP 4.


--------------------
Go to the top of the page
+Quote Post
Liko
post 28.12.2007, 20:45:11
Post #11





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


Tak więc oboje mamy rację. Chodzi o to, że PHP wysyła dane, lecz przeglądarka ich nie wyrzuca, lub też drugi przypadek kiedy na serwerze w php.ini nie masz ustawione implicit_flush = on, output_buffering = off. Wtedy powinieneś widzieć zamierzony efekt.

Ten post edytował Liko 28.12.2007, 20:45:36
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 20:51:12
Post #12





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


No już chciałem powiedzieć, że mnie przekonałeś, bo to faktycznie byłoby miłe i burzyłoby parę moich teorii na temat php, i umożliwiało znaczące działania bez js, więc byłem gotowy przyznac Ci rację z uśmiechem, ale niestety nawet po zmianie ustawień implicit_flush i output_buffering nic specjalnego się nie dzieje. A że PHP wysyła dane, to jest fakt, tak właśnie działa sleep(). Ale chodzi bardziej o efekt niż fakt...


--------------------
Go to the top of the page
+Quote Post
Liko
post 28.12.2007, 21:05:18
Post #13





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


Konkluzja ostateczna: za dużo zachodu, aby działało to u wszystkich. Także zwracam rację Hazelowi i przepraszam za porywczość. Jednak pomysł z wykorzystaniem JS znacznie prostszy i wygodniejszy w zastosowaniu.
Go to the top of the page
+Quote Post
kamilw
post 28.12.2007, 21:40:25
Post #14





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


A możecie pomóć? Jestem zielony w js.
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 21:51:53
Post #15





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


  1. <div id="przykladowy_div">
  2. <script type="text/javascript">
  3. function display()
  4. {
  5. document.getElementById("przykladowy_div").innerHTML += "dodany tekst";
  6. }
  7. window.setInterval(display, 1000);</script>

Coś takiego, nie wiem, czy dokładnie o to chodzi. Jeśli nie, to daj kawałek kodu i będziemy radzić tongue.gif

Ten post edytował Hazel 28.12.2007, 21:52:50


--------------------
Go to the top of the page
+Quote Post
kamilw
post 28.12.2007, 22:07:31
Post #16





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


Jako że moja pętla jest skomplikowana daje prosty szkielet
  1. <?
  2. $i = 1;
  3. while ($i <= 10) {
  4. echo $i++;
  5. echo"<br />";
  6. }
  7. ?>

Chciałbym żeby skrypt wyświetlił "1" poczekał x sekund,wyświetlił "2" itd.
Go to the top of the page
+Quote Post
Hazel
post 28.12.2007, 22:14:04
Post #17





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Podałem rozwiązanie. Stosuj setInterval, nie baw się w timeouty wewnątrz pętli, bo nic dobrego z tego nie wyjdzie. Daj cały kod, jeśli czegoś nie rozumiesz.


--------------------
Go to the top of the page
+Quote Post
kamilw
post 28.12.2007, 22:18:00
Post #18





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


Ale Twoje rozwiązanie nie działa. Wyświetli 1,2,3 i potem powtarza dodatkowy text. A ja chciałbym żeby wyświetliło 1 + ewentualny dodatkowy text wtedy poczekał i wyświetlił 2.
Go to the top of the page
+Quote Post
Hazel
post 29.12.2007, 09:32:38
Post #19





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Nie wiem czy dokładnie rozumiem, ale jak chcesz to możesz zmienić ten kod żeby nie wyświetlał samych liczb, tylko coś jeszcze...
  1. <div id="cos"></div>
  2. <script type="text/javascript">
  3. var counter = 0;
  4. Update();
  5. function Update()
  6. {
  7. if (counter<10)
  8. {
  9. counter++;
  10. document.getElementById("cos").innerHTML=counter;
  11. ID=window.setTimeout("Update();",1000);
  12. }
  13. }


--------------------
Go to the top of the page
+Quote Post
kamilw
post 29.12.2007, 10:50:05
Post #20





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 21.03.2007

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


Nie, nie.

Mam w pętli php zmienną. I chciałbym tak.


Wyświetliło zmienną { Czyli wykonało
Poczekało { 1 raz pętle.

Wyświetliło zmienną { Czyli wykonało
Poczekało { 2 raz pętle.

........................

Tylko w formacie
zmienna <br />
zmienna </br>

Żeby nie podmnieniało tylko jedno pod drugim.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 14.08.2025 - 06:04