Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Timery w PHP
patlysy
post 3.09.2010, 10:11:54
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.08.2010

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


Witam,

Wiem, że ogólnie kod PHP interpretowany jest po stronie serwera a wynik wysyłany do klienta. Jednak potrzebuje jakiegoś wyzwalacza typu "wczytanie strony poprzez kliknięcie w link". Powiedźcie jednak czy istnieje jakakolwiek szansa by PHP ustawić prosty timer po stronie serwera, który cyklicznie będzie wykonywał jakąś akcję? Mówię tutaj także o sytuacjach kiedy przeglądarka jest np. zamknięta. Wiem, że jest to raczej nierealne ale wole się upewnić poprzez kontakt z bardziej "zaawansowanymi" osobami w PHP.

Pozdro
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
gothye
post 3.09.2010, 10:14:21
Post #2





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


google ->> CRON


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
patlysy
post 3.09.2010, 10:28:56
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.08.2010

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


Super. W przyszłości na pewno to wykorzystam. A tak z ciekawości. Cron jest procesem Uniksowym. A czy istnieje szansa cyklicznego odpalania żądanego skryptu na maszynie z zainstalowanym Windowsem? Widziałem, że są alternatywne programiki imitujące Crona dla Windowsa. Testowaliście czy działają poprawnie?
Go to the top of the page
+Quote Post
fander
post 3.09.2010, 10:33:46
Post #4





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

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


Wystarczy użyć "Harmonogram zadań" w windowsie albo "Zaplanowane zadania".

Ja używam tego na serwerze Windows Serwer 2003 do wywoływania skryptu kopi zapasowej.

Ten post edytował fander 3.09.2010, 10:33:56
Go to the top of the page
+Quote Post
patlysy
post 3.09.2010, 10:50:32
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.08.2010

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


Ok. Dzięki za odpowiedź.
Go to the top of the page
+Quote Post
piotr94
post 3.09.2010, 15:06:05
Post #6





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

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


są też na niektórych hostingach dostępne gotowe cron'y, można też znaleźć w necie darmowe crony


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
patlysy
post 4.09.2010, 12:52:01
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 25.08.2010

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


Nie chcę zakładać nowego wątku a moje kolejne pytanie w pewien sposób dotyczy też tego tematu. Proszę powiedźcie mi czy istnieje szansa ustawienia jakiegoś licznika ograniczającego czas wykonywania pętli? I nie chodzi mi tutaj o set_time_limit który zabije mi całą sesję. W pętli fgetem czytam dane z serwera ssh. Zdarza się jednak jednak, że serwer nie odpowiada (zła komenda albo brak znaku nowej linii itd) i pętla stoi na tym poleceniu. Czy można przerwać samą pętlę po określonym czasie?

Pozdro.
Go to the top of the page
+Quote Post
masiakla
post 5.09.2010, 17:32:22
Post #8





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

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


Cytat(patlysy @ 4.09.2010, 13:52:01 ) *
Nie chcę zakładać nowego wątku a moje kolejne pytanie w pewien sposób dotyczy też tego tematu. Proszę powiedźcie mi czy istnieje szansa ustawienia jakiegoś licznika ograniczającego czas wykonywania pętli? I nie chodzi mi tutaj o set_time_limit który zabije mi całą sesję. W pętli fgetem czytam dane z serwera ssh. Zdarza się jednak jednak, że serwer nie odpowiada (zła komenda albo brak znaku nowej linii itd) i pętla stoi na tym poleceniu. Czy można przerwać samą pętlę po określonym czasie?

Pozdro.

Jedyna rzecz, która nachodzi mi na myśl to puszcze nie tego w oddzielnym wątku i pilnowanie ile trwa. Ewentualnie można zaimplementować samemu ssh'a na socketach i pilnować timeout, ale to krecia robota. Zaraz sprawdzę bo nie pamiętam dokładnie, ale tam chyba były jakieś różnice między cli/mod_php/cgi.

//edited:
Taki mały przykładzik:
  1. class Job {
  2. private $parentPID;
  3. private $childPid;
  4.  
  5. public function __construct(){
  6. $this->parentPID = getmypid();
  7. pcntl_signal(SIGCHLD, array($this, "dzieckoSignalHandler")); //ubijanie dzieci
  8. }
  9.  
  10. public function start(){
  11. if($this->childPid = pcntl_fork()) {
  12. echo "rodzic\n";
  13. for($i=0;$i<10;$i++){
  14. echo "czekanie na dziecko ". $i ."s\n";
  15. sleep(1);
  16. }
  17. if(!is_null($this->childPid)){
  18. posix_kill($this->childPid, 0);
  19. echo "dziecko ubite\n";
  20. }
  21. } else {
  22. //tu wykonujesz te swoje gmyrania
  23. sleep(8);
  24. echo "dziecko\n";
  25. sleep(20);
  26. echo "dziecko2\n";
  27. exit(0);
  28. }
  29. return true;
  30. }
  31.  
  32.  
  33. public function dzieckoSignalHandler($signo, $pid=null, $status=null){
  34. if(!pid){
  35. $pid = pcntl_waitpid(-1, $status, WNOHANG);
  36. }
  37.  
  38. if($pid > 0){
  39. $exitCode = pcntl_wexitstatus($status);
  40. }
  41. $pid = pcntl_waitpid(-1, $status, WNOHANG);
  42. $this->childPid = null;
  43. }
  44. }
  45.  
  46. $job = new Job();
  47. $job->start();

Rodzic czeka 10 sekund na wykonanie się dziecka, jeżeli ten się nie zmieści w czasie to go ubija bezczelnie. Można to tez zrobić ciutkę inaczej z wykorzystaniem pcntl_alarm();

Ten post edytował masiakla 5.09.2010, 18:21:43
Go to the top of the page
+Quote Post
zegarek84
post 5.09.2010, 22:18:00
Post #9





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


fajny przykładzik niestety działa tylko na unixach winksmiley.jpg - jakoś wolę inne rozwiązanie na oderwanie procesu... które tutaj nie potrzebne... choć w sumie nawet ze względu na samo sleep na unixach jesli się pisze jakiegoś bocika ma przewagę - jeśli do nich się ograniczymy to PCNTL jak najbardziej by był wskazany...
Cytat(patlysy @ 4.09.2010, 13:52:01 ) *
Nie chcę zakładać nowego wątku a moje kolejne pytanie w pewien sposób dotyczy też tego tematu. Proszę powiedźcie mi czy istnieje szansa ustawienia jakiegoś licznika ograniczającego czas wykonywania pętli? I nie chodzi mi tutaj o set_time_limit który zabije mi całą sesję. W pętli fgetem czytam dane z serwera ssh. Zdarza się jednak jednak, że serwer nie odpowiada (zła komenda albo brak znaku nowej linii itd) i pętla stoi na tym poleceniu. Czy można przerwać samą pętlę po określonym czasie?

Pozdro.
Cytat(masiakla @ 5.09.2010, 18:32:22 ) *
...Ewentualnie można zaimplementować samemu ssh'a na socketach i pilnować timeout, ale to krecia robota....
dlaczego skoro wszystko jest w manualu??
http://pl2.php.net/manual/pl/function.fsockopen.php
fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

Cytat
timeout

The connection timeout, in seconds.

Informacja: If you need to set a timeout for reading/writing data over the socket, use stream_set_timeout(), as the timeout parameter to fsockopen() only applies while connecting the socket.

jeden z komentarzy dla rozjaśnienia sprawy - a jest tam wiele ciekawych komentarzy winksmiley.jpg - wystarczy dostosować do swoich rozwiązań winksmiley.jpg
Here's a quick function to establish a connection to a web server that will time out if the connection is lost after a user definable amount of time or if the server can't be reached


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
masiakla
post 5.09.2010, 22:29:06
Post #10





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

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


@zegarek84: hmmm, możliwe, że nie ruszy na windzie. W sumie nie pomyślałem, na winzgrozie ostatni raz pracowałem w php parę lat temu. Prawidłowo to powinno być wykonane bez użycia sleep, ale zrobiłem tak by było bardziej czytelne.

Ten post edytował masiakla 5.09.2010, 22:33:36
Go to the top of the page
+Quote Post
zegarek84
post 5.09.2010, 23:38:43
Post #11





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


nie miałem na myśli różnicy w działaniu funkcji sleep [drobny niuans] a PCNTL i POSIX które nie są dostępne na platformie Windows...


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

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: 14.08.2025 - 11:11