Mat00
19.07.2012, 11:35:06
Witam,
Chcę opóźnić wykonanie fragmentu kodu na około 3 minuty. Użyłem ob_flush(); flush(); sleep(); ale nie działają. Blokują wczytanie całej strony na 3 minuty i potem wywalają wszystko naraz. Jest mi to potrzebne ponieważ w jednym z cms chcę dodać punkty użytkownikowi np. za przeczytanie artykułu, ale dopiero po 3 minutach od wejścia. Wszystko działa mi idealnie tylko nie wiem jak opóźnić ten czas... może znacie jakieś zupełnie inne rozwiązania ?
wNogachSpisz
19.07.2012, 11:37:56
W PHP ciężko coś takiego zrobić bez kombinacji. Jeśli ma działać na każdym tanim hostingu, to tylko CRON. Stwórz w bazie danych specjalną tabelę do któej będziesz wstawiał zadania do wykonania, może być to np. zserializowany obiekt. Potem CRONem odpalasz taki kod.
Crozin
19.07.2012, 13:54:41
Samo opóźnienie wykonania kodu Ci nic nie da. Bo co jeżeli użytkownik wejdzie na stronę, serwer zacznie odliczać trzy minuty, a następnie użytkownik zamknie okno przeglądarki? Musisz nieco inaczej to rozwiązać.
1. Użytkownik wchodzi na stronę - w sesji zapisujesz czas tego wejścia.
2. Na stronie wrzucasz skrypt JS, który przy pomocy AJAX-a, przykładowo co 30-60 sekund wysyła do serwera żądanie, którego celem jest jedynie poinformowanie serwera o tym, że użytkownik nadal jest na stronie.
3. Skrypt, do którego wysyłane jest żądanie z punktu 2. zapisuje sobie w sesji informację o czasie ostatniej aktywności. Ponieważ ma dostęp do tych samych danych (zapisanych w sesji) co skrypt z punktu 1. może porównać czy czas ostatniej aktywności, czyli obecny czas, minus czas rozpoczęcia oglądania (nadany w pierwszym punkcie) jest większy bądź równy trzem minutom - jeżeli tak, wykonaj dowolny kod jaki tam potrzebujesz.
markonix
19.07.2012, 15:45:10
Sposób dobry jeżeli mówimy o własnych podstronach.
Jeżeli chcemy promować cudze strony można pokusić się o ramkę iframe, w której będzie reklamowana strona (100% szerokości).
U góry jakiś pasek z licznikiem choć to już kosmetyka i działanie zbliżone do rozwiązania kolegi choć bez ajax co X sekund tylko jeden po odliczeniu czasu.
Zalecam wspomóc się sesjami aby skrypt był bardziej bezpieczny.
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.