Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wykonywanie skryptu co x minut
Forum PHP.pl > Forum > Przedszkole
xxx149
Witam,
pisząc "bota" natknąłem się na następujący problem:
muszę wysyłać ping do servera co ok. 3 minut więc stworzylem kod:
  1. <?php
  2. $da=date('i');
  3. $da=$da+3; while(1)
  4. {
  5. $de=date('i');
  6. if($da < $de)
  7. {
  8. $gg->ping();
  9. $da=date('i');
  10. $da=$da+4;
  11. }
  12. }
  13. ?>


Ale niestety nie działa:( Proszę o pomoc w napisaniu działającego skryptu. Z góry thx.
nospor
do usypiania skryptu sluzy sleep();

pozatym nie lepiej by ci bylo uzyc crona?
xxx149
Nie mogę uśpić skryptu ponieważ dalsza jego część musi się ciagle wykonywać.
b4x
Crontab :-) - lub "sztuczne" wywołanie skryptu np <img src="skrypt.php" alt="" /> [i np. sprawdzasz w bazie kiedy ostatnio był wykonywany i wykonujesz dalszą część tongue.gif
nospor
Cytat
Nie mogę uśpić skryptu ponieważ dalsza jego część musi się ciagle wykonywać.
hmmm... jaka dalsza czesc skryptu? Masz tu nieskonczona petle ktora w srodu ma w zasadzie nic nie liczac ifa ktory sprawdza te 3 minuty. no chyba ze docelowo w tej petli beda jeszcze jakies inne rzeczy to sorki.
xxx149
Chciał bym żeby pętla wykonywała się tylko jeśli ostatnie pingowanie było więcej niz 3 minuty wcześniej.
b4x
No to proponuje użyć crontaba + mysql..

Napisz sobie jakiś skrypt + prosta struktura bazy.

Typu ostatnio_sprawdzone

Skrypt:

- Wrzuć w nim połączenie do mysqla, sprawdzanie kiedy ostatnio było wykonywane, i jeśli był więcej niż 3 minuty temu - zmień w bazie ostatnie wykonywanie na aktualny czas - i wykonaj skrypt tongue.gif

A Crontaba możesz sobie co 1min ustawić :-)
PiXel2.0
sleep() stosujesz tak:
  1. <?php
  2. while(true){
  3.  $gg->ping();
  4.  sleep(180);
  5. }
  6. ?>


Tylko nalezy pamietac o max_execution_time w php.ini.
b4x
@PiXel2.0 - ale on nie chce używać sleep" title="Zobacz w manualu PHP" target="_manual - bo nie chce "uśpić" go :-)

Cytat
Nie mogę uśpić skryptu ponieważ dalsza jego część musi się ciagle wykonywać.
PiXel2.0
No wiec moze tak:
  1. <?php
  2. $next_ping = time();
  3. while(true){
  4. if(time() >= $next_ping){
  5. $gg->ping();
  6. $next_ping += 180;
  7. }
  8. // pozostaly kod
  9. }
  10. ?>

Kod podobny do tego z tematu, ale w temacie calosc opierala sie o minuty a minuty resetuja sie co godzine wiec nie bardzo to mialo sens...

Radze tez zapoznac sie z declare
xxx149
Ma sens, ja o te minuty opieram dzialanie prawie calego skryptu. Problem juz rozwiazalem:P
  1. <?php
  2. $e=date('i');
  3. $e=$e+3;
  4. while (1)
  5. {
  6.  while($e < date('i'))
  7.  {
  8.  ping();
  9.  $e=date('i');
  10.  $e=$e+3;
  11.  }
  12. }
  13. ?>
PiXel2.0
Jesli uruchomisz swoj skrypt midzy godzina **:56:** a **:59:** to ping() nie wykona sie ani razu tongue.gif
A jesli uruchomisz skrypt w innych godzinach to ping() przestanie dzialac gdy zmienna $e osiagnie wartosc wieksza niz 59 w linii 10.
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.