Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zapytanie na temat funkcji sleep()
Forum PHP.pl > Forum > Przedszkole
grzegorz_w3
Witam
Mam taki problem, chcę aby skrypt wyświetlił mi informacje, a później zasną.

Jeśli napisze taki skrypt:

  1. <?php
  2. print('start');
  3. sleep(20);
  4. print('koniec');
  5. ?>


skrypt wyświetli wszystko dopiero wtedy gdy się wybudzi, a chodzi mi o to aby słowo "start" wyświetlał przed zaśnięciem, a słowo "koniec" po przebudzenie. Czy jest to możliwe??
Prośże o pomoc.
Z góry dziękuje.
Fifi209
flush ?
thek
Fifi Ci dobrze podpowiada. Musisz wywalić wszystko na ekran zanim funkcja sleep się wykona. Problem jest czasem z flushem taki jednak, że w pewnych konfiguracjach i tak nie chce tego zrobić, ponieważ bufor nie jest jeszcze odpowiednio zapełniony. Dlatego trzeba walić kilka różnych funkcji by rzeczywiście miało to miejsce. Zwróć zwłaszcza uwagę na pierwszy komentarz do funkcji ob_flush.
grzegorz_w3
A czy ktoś mógłby zapodać jakiś przykład bo ja próbowałem i mi jakoś nie chce działać.
thek
Pokaż kod jak próbowałeś, bo coś Ci nie wierzę smile.gif Po moim i fifiego poście nie ma prawa nie działać.
grzegorz_w3
  1. <?php
  2. print('start ');
  3. sleep(5);
  4. print('koniec');
  5. ?>


thek
To poczytaj teraz komentarz numer 1 przy manualu do ob_flush i uzupełnij brakujące funkcje smile.gif
grzegorz_w3
  1. <?php
  2. function flush_buffers(){
  3. flush();
  4. }
  5. print('start ');
  6. flush_buffers();
  7. sleep(5);
  8. print('koniec');
  9. ?>


Probowalem tak i tez nie dziala
kapuch
Sprawdzone...dziala:
  1. <?php
  2. echo 'START<br />';
  3. for($i=0; $i<10; $i++)
  4. {
  5. echo $i.'<br />';
  6. flush();
  7. sleep(1);
  8. }
  9. echo $i.'<br />KONIEC';
  10. ?>
grzegorz_w3
Ale dlaczego bez pętli nie działa?
flashdev
Ciekawe, w chrome poniższy kod nie działa tak jak w innych przeglądarkach.

  1. for( $i = 0; $i < 10; $i++ ){
  2. echo $i . '<br/>';
  3. flush();
  4. sleep(1);
  5. }


Może to że nie działa to wina przeglądarki, a nie kodu php?
kapuch
Cytat(grzegorz_w3 @ 4.08.2010, 17:07:21 ) *
Ale dlaczego bez pętli nie działa?

Jak zle robisz to nie dziala, mi bez petli tez dziala.
  1. $i = 0;
  2. echo $i.'<br />';
  3. sleep(5);
  4. $i++;
  5. echo $i.'<br />';
  6. sleep(5);
  7. $i++;
  8. echo $i;

Dostales juz kilka gotowcow i nadal masz problemy.
erix
Cytat
Jak zle robisz to nie dziala, mi bez petli tez dziala.

To zależy od serwera i czy coś jest już w buforze httpd. Niestety, bywają z tym cyrki, więc tak nie bluzgajcie. tongue.gif
kapuch
Cytat(erix @ 4.08.2010, 17:43:10 ) *
To zależy od serwera i czy coś jest już w buforze httpd. Niestety, bywają z tym cyrki, więc tak nie bluzgajcie. tongue.gif

No ale on napisal "Ale czemu to bez petli nie dziala", wiec domyslam sie ze z przegladarka ma wszystko OK winksmiley.jpg
Ale autor juz sie nie wypowiada, wiec pewnie juz mu dziala winksmiley.jpg
thek
A teraz proszę zerknąć sobie do mojego posta i doczytać:
Cytat
Problem jest czasem z flushem taki jednak, że w pewnych konfiguracjach i tak nie chce tego zrobić, ponieważ bufor nie jest jeszcze odpowiednio zapełniony.
W większości przypadków użycie wielu możliwych funkcji flushujących pomaga, aczkolwiek zawsze jest ten niewielki odsetek gdzie trzeba mocno się nagimnastykować. Poczytaj komentarze pod tymi funkcjami... Na bank gdzieś powinna być informacja co w takich wypadkach zrobić smile.gif Wątpię, że sobie z tym nikt nie poradził winksmiley.jpg
kapuch
No tak, ale jemu musi dzialac skoro napisal, ze nie dziala mu, gdy wyciagnie to z petli, czyli ze w petli dziala winksmiley.jpg
thek
A teraz popatrz na to tak, że w pętli może nastąpić wypełnienie bufora w określonym momencie i wtedy nastąpi wyświetlenie (choćby co 2-3 kroki pętli). Oczywiście to tylko moje przypuszczenie, gdyż nie widzę jak kod działa na jego maszynie. Ogólnie jeśli ma taki problem, to powinien pokombinować jak dopełnić bufor by flushowanie zadziałało.
kapuch
Cytat(thek @ 4.08.2010, 22:54:56 ) *
A teraz popatrz na to tak, że w pętli może nastąpić wypełnienie bufora w określonym momencie i wtedy nastąpi wyświetlenie (choćby co 2-3 kroki pętli). Oczywiście to tylko moje przypuszczenie, gdyż nie widzę jak kod działa na jego maszynie. Ogólnie jeśli ma taki problem, to powinien pokombinować jak dopełnić bufor by flushowanie zadziałało.

No fakt, o tym nie pomyslalem winksmiley.jpg
juniordev
Ja niestety, mam ten sam problem. Gdy sprawdzałem przykłady pod FireFox 6.0 jaki najnowszym Chrome to nie działa. Czy jest to może wina zapełnienia bufora, jak było to powiedziane wyżej? jeżeli tak to w jaki sposób można dopełnić bufor?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.