Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] wykonywanie skryptu co x minut
xxx149
post 8.05.2008, 13:30:34
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.05.2008

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


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.
Go to the top of the page
+Quote Post
nospor
post 8.05.2008, 13:31:59
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




do usypiania skryptu sluzy sleep();

pozatym nie lepiej by ci bylo uzyc crona?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xxx149
post 8.05.2008, 13:34:44
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.05.2008

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


Nie mogę uśpić skryptu ponieważ dalsza jego część musi się ciagle wykonywać.
Go to the top of the page
+Quote Post
b4x
post 8.05.2008, 13:36:48
Post #4





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


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


--------------------
Go to the top of the page
+Quote Post
nospor
post 8.05.2008, 13:38:48
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xxx149
post 8.05.2008, 13:53:37
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.05.2008

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


Chciał bym żeby pętla wykonywała się tylko jeśli ostatnie pingowanie było więcej niz 3 minuty wcześniej.
Go to the top of the page
+Quote Post
b4x
post 8.05.2008, 13:58:14
Post #7





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


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ć :-)

Ten post edytował b4x 8.05.2008, 13:59:35


--------------------
Go to the top of the page
+Quote Post
PiXel2.0
post 8.05.2008, 14:05:52
Post #8





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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.
Go to the top of the page
+Quote Post
b4x
post 8.05.2008, 14:07:56
Post #9





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


@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ć.


Ten post edytował b4x 8.05.2008, 14:08:26


--------------------
Go to the top of the page
+Quote Post
PiXel2.0
post 8.05.2008, 14:14:59
Post #10





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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

Ten post edytował PiXel2.0 8.05.2008, 14:24:44
Go to the top of the page
+Quote Post
xxx149
post 8.05.2008, 14:59:50
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.05.2008

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


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. ?>
Go to the top of the page
+Quote Post
PiXel2.0
post 8.05.2008, 15:11:13
Post #12





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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.

Ten post edytował PiXel2.0 8.05.2008, 15:14:23
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: 1.07.2025 - 00:51