Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Usuwanie odpowiednich wpisów w bazie co 24 godziny
Forum PHP.pl > Forum > Przedszkole
HTMLame
Problem jest następujący:

User rejestruje się na stronie, po czym na jego maila trafia link aktywujący, a do bazy są zapisywane jego dane, przy czym jedną z kolumn jest kolumna 'aktywowany', która początkowo ma wartość 0, a po kliknięciu na link aktywujący zmienia wartość na 1. Jest też kolumna przechowująca datę i godzinę rejestracji.

Chciałbym, aby co 24 godziny (np. codziennie o północy) z tabeli użytkowników zostali usunięci użytkownicy, którzy mają wartość aktywowany=0 i którzy zarejestrowali się wcześniej 48 godzin temu (aktualna_data - data_rejestracji > 48 godzin).

Jak to zrobić?

Chciałbym to zrobić w taki sposób, żeby zadziałał na każdym płatnym hostingu (a przynajmniej na większości), ponieważ nie będę miał możliwości "kopania" w ustawieniach serwera ani dostępu do panelu administracyjnego konta.
wookieb
Cron-em Teraz raczej każdy hosting go ma.
CyberDuck_
Po co cron ?
Aktywacje za pewne wykonujesz w skrypcie php, ktory np
sprawdza czy link w ktory kliknieto zawiera zmienna z odpowiednim
kodem, ktory jest porownywany z wczesniej zapisanym w bazie.
No i jesli sie zgadzaja to zmieniasz w bazie aktywowany na 1.
Jesli link istnieje albo i nie to wyswietlasz jakis adekwatny do tego
komunikat.
Ale wczesniej przeciez mozesz sprawdzac czy uplynelo juz za duzo
czasu i kasowac przestarzale linki jednym zapytaniem.
Nie potrzebny Ci do tego specjalnie cron. Cron oczywiscie
tez moze byc, ale ja osobiscie sie wyzbywam takich rozwiazan
przy pisaniu stron bo biore pod uwage, ze w przyszlosci moze
zajsc potrzeba przeniesienia strony, a wtedy moje poszukiwania
ogranicza mozliwosc grzebania w cron.
Stosuje takie rozwiazania jedynie tam gdzie nie mam innej mozliwosci.
erix
Ok, ale cron się wykona niezależnie, a w takim pseudoharmonogramie będzie odczuwalne opóźnienie. ;]

Cytat
Stosuje takie rozwiazania jedynie tam gdzie nie mam innej mozliwosci.

Bezsens, patrz: wyżej.
CyberDuck_
Erix wytlumacz mi jaki w tym jest bezsens ?
1. tak czy tak zawsze jesli sprawdzisz przed zaakceptowaniem
klucza waznosc wpisow to pozniej sa one juz nie wazne
jesli przekrocza dopuszczalny termin, wiec dla samej strony
nie ma to znaczenia.
2. nie ma znaczenia tez dla wlasciciela portalu bo wystarczy
odpowiednio skonstruowac zapytanie i dostaje sie tez taka
odpowiedz jaka chce, a nawet wiecej bo brak informacji nie da
sie odbudowac, a to, ze jeszcze link nie zostal skasowany tez
moze o czyms swiadczyc.
3. uniezaleznia sie od zystemu. W tym dokladnie wypadku nie ma
znaczenia czy to zrobi cron czy php. Jesli jednak mam wybierac
to z tego wlasnie powodu wybieram php.
4. nieobciazam dodatkowo serwera odpalaniem co minute lub
co 24 godziny skryptu, ktory cos tam chce zrobic.
5. aaa .... to juz bylo w punkcie 3 smile.gif ale nie musze szukac
specjalnie w przyszlosci serwera, ktory mi to obsluzy ...
Juz widzialem takich co specjalnie szukali dla swojej strony wstepu
do shell, cron i paru innych rzeczy bez ktorych stronka jest ... niepelnosprawna.

Gdzie Ty tu widzisz bezsens ? Bezsensem jest wykorzystywanie czegos
na wyrost tam gdzie nie potrzeba.

Napisalem przeciez wczesniej, ze owszem stosuje cron tam gdzie
sie nie da inaczej. Wczoraj wlasnie skonczylem skrypt dla swojego
panela administracyjnego www do sterowania serwerem pod linux.
Dopisalem opcje wykonywania kopii zapasowej w sposob planowy
lub natychmiastowo z poziomu panela www. No i tutaj musialem
uzyc cron bo nie dosc, ze czas moge sobie ustawic z dokladnoscia
co do 1 min to jeszcze moge zaplanowac go co dowolny czas, albo
wykonac natychmiastowo z wylaczniem lub bez wybranych demonow
i przeslaniem lub nie pliku wynikowego na wybrany serwer ftp.
Skrypt sam dba o to zeby jesli wykona kopie to przestawia sie
na nastepny termin. Skrypt php jedynie generuje kod dla linux, a
reszta dzieje sie sama.
wookieb
Zapominasz o jednym ważnym aspekcie. Istnieje konieczność żeby chociaż jeden użytkownik próbował aktywować konto. A jak przez jakiś dłuższy okres się to nie stanie? To będziesz miał w bazie niepotrzebne rekordy.
A jak będzie dużo aktywacji? Będziesz wykonywał dużo niepotrzebnych zapytań. Cron nie jest jakimś cudem, który jest trudno dostępny, bo ja pisałem jest raczej dostępny na KAŻDYM hostingu. Nie mówie o darmowych gównach bo to nie hosting.

Właśnie twój pomysł, jest robieniem czegoś nad wyrost. Bo skoro ma być usuwane Raz na 24H to robi się to właśnie w ten sposób.
CyberDuck_
Cytat
Zapominasz o jednym ważnym aspekcie. Istnieje konieczność żeby chociaż jeden użytkownik próbował aktywować konto. A jak przez jakiś dłuższy okres się to nie stanie? To będziesz miał w bazie niepotrzebne rekordy.

To co z tego ? No pomysl sam. Przy kazdej rejestracji takie rekordy zostana
wczesniej usuniete. Zadam wiec pytanie to co z tego ?
Wiesz z moich doswiadczen wynika, ze na stronie z 20 tys
uniqu, 120 tys odswierzen strony dziennie max takich
wpisow zostaje okolo 4 po czym wystarczy jedna osoba, ktora sie
bedzie chciala zarejestrowac i te przeterminowane znikaja.
Zadam wiec jeszcze raz pytanie. Wiec co z tego ? i jaki tu widzisz bezsens ?
Cytat
A jak będzie dużo aktywacji? Będziesz wykonywał dużo niepotrzebnych zapytań.

Mam na stronie okolo 30 aktywacji dziennie. Zapytania sa wykonywane
wylacznie w wypadku jesli nastepuje proba aktywacji. 30 dziennie exclamation.gif
Cytat
Cron nie jest jakimś cudem, który jest trudno dostępny, bo ja pisałem jest
raczej dostępny na KAŻDYM hostingu.

Oj zdziwilbys sie ...
Nie pisze tutaj o dedykach bo kto dla malutkiej strony kupuje dedyka ?
Administratorzy zazwyczaj jesli odsprzedaja hosting to nie jest w ich interesie
aby dodatkowo obciazac system poprzez kilka skryptow, ktore trzeba z soba
zgrac aby to zadzialalo, a co za tym idzie dodatkowo obciazac system.
W ich interesie jest aby jak najwiecej stron upakowac na serwerze
i zeby uzyskac z niego jak najwiecej kasy. Chyba po to sie to robi ...

Cytat
Raz na 24H to robi się to właśnie w ten sposób.

Ja rozmawiam z programistami czy z kim w koncu ?
Patrz :
  1. $db = mysql_query("DELETE FROM em_aktywacje WHERE (data_waznos<$terazjest)");

Jedno zapytanie zalatwia sprawe. A Ty kazesz :
1. dodac wpis obciazajacy cron
2. dodac skrypt, ktory bedzie to wykonywac z kilkoma rozkazami
wiecej wewnatrz ...

I po co ? Tylko po to zeby to samo zalatwic co ja zalatwiam
jedna linijka. Zareczam Ci, ze duzo takich wpisow nie zostaje w bazie, a
jak przemyslisz sprawe to tak na prawde zostaja sie wylacznie wpisy, ktore nie
przekroczyly jeszcze czasu. Analogicznie przy stronie, ktora ma duza
ogladalnosc wiec jest wiecej sie rejestrujacych, takich wpisow jest
wiecej, ale sa czesciej kasowane. Przy stronie rzadziej odwiedzanej
analogicznie bedzie tez mniej rejestrujacych sie i co za tym idzie
mnie wpisow.

Jeszcze raz bo nie kumam ... co jest bez sensu ?
Wasze kumoterstwo czy brak odwagi zeby sie przyznac do bledu ?
erix
Cytat
Oj zdziwilbys sie ...
Nie pisze tutaj o dedykach bo kto dla malutkiej strony kupuje dedyka ?

Na wszystkich hostingach, na których działam, CRON jest i nie ma problemu z dodawaniem do nich zadań. Tak samo jest z safe_mode - włączony -> brak kompetencji administratorów (którzy nie słyszeli o suPHP/suExec)

Cytat
Jedno zapytanie zalatwia sprawe. A Ty kazesz :
1. dodac wpis obciazajacy cron

No nie przesadzaj, CRON jest tak skonstruowany, żeby jedno zadanie więcej go nie obciążyło...

Cytat
Jeszcze raz bo nie kumam ... co jest bez sensu ?
Wasze kumoterstwo czy brak odwagi zeby sie przyznac do bledu ?

Napisałem wyraźnie - skrypt odpalony przez CRON działa niezależnie od serwisu.

Cytat
Jeszcze raz bo nie kumam ... co jest bez sensu ?

Czytaj wyżej.

Cytat
Wasze kumoterstwo czy brak odwagi zeby sie przyznac do bledu ?

Do jakiego błędu? Że trafiasz na serwery z poprzedniej epoki, na których cron nie ma? Strony też klepiesz od zera, czy bazujesz na swojej bibliotece/frameworkach?
wookieb
Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
Mam na stronie okolo 30 aktywacji dziennie. Zapytania sa wykonywane
wylacznie w wypadku jesli nastepuje proba aktywacji. 30 dziennie exclamation.gif

Co nie zmienia faktu 30 >> 1


Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
Administratorzy zazwyczaj jesli odsprzedaja hosting to nie jest w ich interesie
aby dodatkowo obciazac system poprzez kilka skryptow, ktore trzeba z soba
zgrac aby to zadzialalo, a co za tym idzie dodatkowo obciazac system.

Tak a dane z dysków backupują dłutem (można i kroplami wody) na kamienne tablice.

Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
Ja rozmawiam z programistami czy z kim w koncu ?

I mówi to geniusz od spostrzegawczości i nie programistycznego podejśca (przypominam temat z problemem imagecopymerge)

Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
Jedno zapytanie zalatwia sprawe. A Ty kazesz :
1. dodac wpis obciazajacy cron

Nie wiem jak serwer ale ty chyba widzisz większy w problem obciążeniu siebie.

Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
2. dodac skrypt, ktory bedzie to wykonywac z kilkoma rozkazami
wiecej wewnatrz ...

Tak. Rozkaz to "olej komentarz opisujący zadanie crona".

Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
Jeszcze raz bo nie kumam ... co jest bez sensu ?

"Myślę, że jogurciki podawane przez babcię w toples."
Cytat(CyberDuck_ @ 12.09.2009, 21:02:09 ) *
Wasze kumoterstwo czy brak odwagi zeby sie przyznac do bledu ?

"Bardziej ten toples"
dr_bonzo
OMG

Cytat
Wiesz z moich doswiadczen wynika, ze na stronie z 20 tys
uniqu, 120 tys odswierzen strony dziennie


O dzizez, to 83.3 req/min, dolicz do tego 1 req cronowy - straszne obciazenie

Cytat
Administratorzy zazwyczaj jesli odsprzedaja hosting to nie jest w ich interesie
aby dodatkowo obciazac system poprzez kilka skryptow, ktore trzeba z soba
zgrac aby to zadzialalo, a co za tym idzie dodatkowo obciazac system.


O matko, wylacza crona, pozwola na phpbb+przemo i zawala system 100x bardziej - gdzie tu logika?



A wiesz co to jest jasnosc architektury?

Skoro zadanie ma byc uruchamiane raz na X czasu (a takich zadan bedzie pewnie wiecej - w ostatnim systemie mam ich 17) to najoczywistszym rozwiazaniem jest cron.
Cron jest do uruchamiania zadan co okreslony interwal czasu. KROPKA.

Po grzyba kombinowac jakis skomplikowany system, ktory jest zalezny od aktywnosci userow na stronie. Ktos zajrzy ci do kodu - "po **** tutaj dajesz usuwanie powiadomien".
A co jak takich akcji wiecej ci przyjdzie? tez je gdzies upchasz?


Cytat
W ich interesie jest aby jak najwiecej stron upakowac na serwerze
i zeby uzyskac z niego jak najwiecej kasy.

Generalnie na tym zalezy firmie prowadzacej hosting. Ale jest tez drugi parametr - jakos uslug - czy obecni klienci danej firy beda ja polecac jesli ich serwer chodzi jak slimak?
CyberDuck_
Cytat
Po grzyba kombinowac jakis skomplikowany system, ktory jest zalezny od aktywnosci userow na stronie. Ktos zajrzy ci do kodu - "po **** tutaj dajesz usuwanie powiadomien".
A co jak takich akcji wiecej ci przyjdzie? tez je gdzies upchasz?

Hmmm obawiam sie z nie zrozumiales biggrin.gif sciana.gif
A gdybys tak chwilke tylko glebiej sie chcial zastanowic
to moze bys wpadl na to ze sa tez inne instrukcje w php, ot chocby
  1. if ($data > time()) {

zeby ograniczczyc, jesli juz o to tak sie czepiasz, ilosc zapytan.

Jeszcze raz sie pytam jakie to jest uzaleznienie, w tym wyapdku, od
ogladalnosci strony jesli to jest wcale nie zauwazalne ?
Wybacz, usiadz spokojnie i przemysl sprawe logicznie bo chyba
cos u Ciebie z tym kiepsko. Nie wazne czy ktos wejdzie za minute
czy za 1500 dni skoro wpis, I NIE MOJ BOZE O AKTYWNOSCI, tylko caly
wpis zostanie skasowany przed sprawdzeniem ... sciana.gif
A i jeszcze jedna prosba. Przeczytaj caly watek wnikliwie bo
chyba cos Ci umknelo ... cron nie wszedzie jest dostepny dla userow
serwera tam gdzie podkupuja konta. Sam nie daje wstepu do shell i cron.
Mialem przykre z tym doswiadczenie.
Po przejrzeniu pliku dalem kolesiowi dostep do tego pliku, a on
pozniej go zmienil. Serwer nie zauwazy zmiany tresci. Zaczol troszke
szarzowac po email i innych ...
erix
Cytat
zeby ograniczczyc, jesli juz o to tak sie czepiasz, ilosc zapytan.

Que?

Cytat
Wybacz, usiadz spokojnie i przemysl sprawe logicznie bo chyba
cos u Ciebie z tym kiepsko

To Ty się zastanów, co piszesz; dawno takie głupoty czytałem:

Cytat
cron nie wszedzie jest dostepny dla userow
serwera tam gdzie podkupuja konta. Sam nie daje wstepu do shell i cron.
Mialem przykre z tym doswiadczenie.
Po przejrzeniu pliku dalem kolesiowi dostep do tego pliku, a on
pozniej go zmienil. Serwer nie zauwazy zmiany tresci. Zaczol troszke
szarzowac po email i innych ...

W hostingach, gdzie administratorzy mają odpowiednie doświadczenie, nie ma z tym najmniejszych problemów. To że nie byłeś w stanie tego odpowiednio skonfigurować, to nie znaczy że na innych hostingach tak jest. Wiele udostępnia zarówno crona jak i SSH; jak nie ustawisz uprawnień, to chyba oczywiste, że czyta czyjeś maile, etc.

Nawet niektóre darmowe serwery udostępniają cron. tongue.gif
CyberDuck_
Erix takich glupot jak Ty z palca wyssanych to ja tez
dawno nie czytalem ... serio. Najpierw troszke
praktyki, a pozniej sie wypowiadaj. Zycze powodzenia
wszystkim, ktorzy blyszcza umiejetnosciami w glowie ...
... swojej biggrin.gif sciana.gif

Przedstawilem argumenty w punktach i to dosc madre
jesli chodzi o ten przypadek. Nie ma sensu drazyc tematu dalej.
Jesli chcesz to sobie ustawiaj cron. Twoja sprawa.
Na tej samej stronie, ktora podawalem za przyklad mam
conajmnniej 6 procesow ustawianych na czas i przy wszystkich
nie mialem zadnych problemow bez cron. Przenosze strone
i dziala dalej. Jedyne na co o maly wlos moglbym sie pokusic
do zajrzenia w shell to ustawienie nobody dla pewnego skryptu,
ktory mi pakuje do paczki wybrany temat wraz z obrazkami
i zrzutem bazy po to zeby moc pozniej w razie draki lub skasowaniem
tematu przywrocic go z paczki jednym kliknieciem.
Nie wspomne juz o szpiegu, gdzie pokazuje mi userow gdzie sa, czat
na php i inne . Cron ... pfff .. smile.gif
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.