Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczne odliczanie
Forum PHP.pl > Forum > PHP
koreja
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
empathon
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.
koreja
Dzięki, wypróbuję smile.gif

Pozdrawiam, koreja
empathon
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ń.
koreja
To rozumiem, ale jeśli każdy użytkownik włączy takowe odliczanie, to Cron Tab raczej sobie nie poradzi... winksmiley.jpg
sowiq
Hmm, chyba średnio zrozumiałeś 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).
koreja
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?
sowiq
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.
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.