Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Automatyczne odliczanie
koreja
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 22
Dołączył: 15.07.2008
Skąd: Raniżów/Rzeszów

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


Witam. Zastanawia mnie jedna sprawa. Mianowicie jak wykonać automatyczne odliczanie, czyli opcję, która po włączeniu uaktywni odliczanie, np od 10h co sekundę, a po zakończeniu odliczania uzupełni bazę danych albo wyświetli tekst na ekranie. Całość wydaje się prosta do napisania w AJAX, jednak mnie chodzi o takie odliczanie, które będzie kontynuowane niezależnie od włączonej strony ze skryptem. Da się zrobić coś takiego w PHP ew. z AJAXem?

Pozdrawiam, koreja
Go to the top of the page
+Quote Post
empathon
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

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


Dodajesz event do bazy.
Przez crontab odpalasz skrypt który sprawdza "czy już?" i ewentualnie wykonuje odpowiednia akcje.
Niezależnie robisz sprawdzanie czasu via WWW przez AJAX.

Edit: Licznik w JS synchronizowany via AJAX.
Go to the top of the page
+Quote Post
koreja
post
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 22
Dołączył: 15.07.2008
Skąd: Raniżów/Rzeszów

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


Dzięki, wypróbuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam, koreja
Go to the top of the page
+Quote Post
empathon
post
Post #4





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

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


Można to jeszcze trochę usprawnić.
Odpalając skrypt via cron'e masz graniczenie wynikające z czestotliwości jego uruchamiania.
JS po stronie klienta nie może sam dać requesta bo wtedy każdy będzie mogł odpalić akcje w dowolnym momencie.

Proponuje, żeby licznik JS po dojechaniu do zera wysyłał request do skryptu odpalanego w cronie. Ten sprawdza czy rzeczywiście można już uruchomić akcje i wykrywając rodzaj requesta (XMLHtmlRequest) zwraca odpowiedni respond (dla crona nic, dla ajax to co potrzebujesz).

Dzięki temu przy działającym skrypcie w JS ominiesz ograniczenia Cron'a a bez... coż tego już nie ominiesz bez bardziej skomplikowanych rozwiązań.
Go to the top of the page
+Quote Post
koreja
post
Post #5





Grupa: Zarejestrowani
Postów: 120
Pomógł: 22
Dołączył: 15.07.2008
Skąd: Raniżów/Rzeszów

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


To rozumiem, ale jeśli każdy użytkownik włączy takowe odliczanie, to Cron Tab raczej sobie nie poradzi... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
sowiq
post
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Hmm, chyba średnio zrozumiałeś (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cron jest usługą na serwerze i służy do wykonywania jakiegoś zadania co określony czas, np. wykonanie skryptu do minutę. Ale ograniczenie jest takie, że częstotliwość wykonywania zadań przez cron jest ograniczona - nie da się CHYBA ustawić odpalania skryptu co sekundę. Zresztą nie wiem czy miałoby to sens.

empathon podał Ci bardzo dobre rozwiązanie - cron wykonuje skrypt co jakiś czas, a on sprawdza, czy odliczanie już powinno się skończyć. Jeśli nie, to nic nie wykonuje. W przeciwnym wypadku coś tam się dzieje i zapisuje do bazy aktualny czas + 10h - do kolejnego sprawdzenia.
Dzięki temu nawet odpalenie Twojego skryptu godzinę przed czasem niczego Ci nie popsuje. A zwiększenie dokładności odliczania możesz uzyskać poprzez wysłanego request'a via Ajax (bo np. czas już się skończył, ale Cron odpali skrypt za 45 sek).

Ten post edytował sowiq 31.10.2008, 17:58:07
Go to the top of the page
+Quote Post
koreja
post
Post #7





Grupa: Zarejestrowani
Postów: 120
Pomógł: 22
Dołączył: 15.07.2008
Skąd: Raniżów/Rzeszów

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


Tak, tylko że Ajax będzie wykonywany jeśli użytkownik będzie online. Co jeśli będzie miał zamkniętą przeglądarkę ze skryptem?
Go to the top of the page
+Quote Post
sowiq
post
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


To wtedy odliczaniem zajmie się Cron, ale dokładność będzie wynosiła tyle, ile częstotliwość wykonywania skryptu. Ew. możesz zapisać w bazie - godz 12:00. Jeśli skrypt zostanie odpalony o 12:05, to widzi, że czas w bazie był ustawiony na 12:00. Skoro czas minął, wykonuje jakieś tam operacje i w bazie zapisuje godz. 22:00 jako następny koniec odliczania.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:00