![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 22 Dołączył: 15.07.2008 Skąd: Raniżów/Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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ń. |
|
|
![]()
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)
|
|
|
![]()
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 |
|
|
![]()
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?
|
|
|
![]()
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.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:51 |