Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από freds » 10 Νοέμ 2005 23:50

Γεια σας.

Θα ήθελα να ρωτήσω αν είναι δυνατόν να γίνει το παρακάτω.

Έχω ένα site και χρησιμοποιώ σε αυτό βάση. Έχω λοιπόν κάποιες εγγραφές στη βάση (MySQL). Θέλω αυτές οι εγγραφές να είναι αποθηκευμένες στην βάση για κάποιο χρονικό διάστημα η κάθε μία και μετά να διαγράφονται. Το ίδιο χρονικό διάστημα για όλες ας πούμε, ή για κάποιες 30 μέρες, για άλλες 60 και για άλλες 90 ημέρες δεν έχει σημασία.

Σκέφτομαι ότι θα μπορούσα να φτιάξω μια σελίδα php που να την τρέχω κάθε μέρα και κάθε φορά να σβήνω τις εγγραφές που έχουν ξεπεράσει το όριο τους.

Αυτό όμως μάλλον δεν είναι εφικτό, όχι από προγραμματιστική ανεπάρκεια αλλά για άλλο λόγο (προφανώς δεν μπορώ να το κάνω αυτό κάθε μέρα για την υπόλοιπη ζωή του site). :lol:

Η ερώτηση λοιπόν είναι, αν το παραπάνω είναι εφικτό να αυτοματοποιηθεί έτσι ώστε να γίνεται από μόνο του μία φορά την ημέρα. Να ελέγχει δηλαδή ποιές εγγραφές έχουν ξεπεράσει το όριο τους και να τις διαγράφει. Δεν θέλω να κάνω τον έλεγχο αυτό σε κάθε σελίδα του site, για λόγους ταχύτητας. Ή αυτό δεν θα φέρει μεγάλη καθυστέρηση; Οι εγγραφές ενδέχονται να είναι αρκετές για να μη πούμε πολλές.

Καμιά ιδέα; Ποιός είναι ο καλύτερος τρόπος να πραγματοποιηθεί; Thanks.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από Rapid-eraser » 11 Νοέμ 2005 09:01

mporeis va xrisimopiiseis sceduled tasks tou litourgikou sou. (px gia to linux legete cron) ftiakse eva ksexoristo php arxeio pou va trexei apo browser kai dose to link stov administrator sou va sou perasei to cron work opote epi8imeis va trexei :)'

prosexe tnv asfalia tou script movo giati eivai ekte8imevo.
Gia va apofigeis afto to problima evalaktika mporeis va grapseis meso tou cli to idio script alla afto proipo8etei pos n php exei givei compile oste va ipostirizei command line interface.
Ekei apla 8a doseis to path stov leitourgiko tou php arxeiou sou stov administrator.

(av exeis access stov cron apo kapoio panel px cpanel mporeis va to kaveis 8eoritika kai movos sou)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από freds » 11 Νοέμ 2005 12:14

Αν κανω το εξής;
Να φτιάξω ένα πίνακα με δύο πεδία id και deletion_date. Όταν γίνει η διαγραφή, το πεδίο deletion_date θα παίρνει την τιμή της ημερομηνίας που έγινε η διαγραφή. Έτσι κάνω τον έλεγχο, αν η σημερινη ημερομηνία (current date) είναι διαφορετική από την deletion_date να να γίνεται include το αρχείο της διαγραφής.

Με αυτό τον τρόπο το αρχείο θα τρέχει μόνο μία φορά και ο έλεγχος έχει περιοριστεί στο deletion_date.

Θα μπορούσε αυτό να αποτελέσει μια λύση; Ποια θα είναι τα πιθανά μειωνεκτήματα;

Πάντως για αυτά που ανέφερες παραπάνω :doh:

:crash:

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από fafos » 11 Νοέμ 2005 16:03

To poio sosto gia to provlhma sou einai auto pou grafei o rapid.. an den mporeis na kaneis cron mporeis na feiakseis ena arxeio to opoio tha tovaleis me include h require se kapoia selida h opoia trexei sxedon kathimerina gia na mporei nadinei sthn vash tis entoles delete. Parakato sou grafo mia function thn opoia mporeis na xrhsimopoihseis gia auto pou thes:

Κώδικας: Επιλογή όλων

<? 
function cleanbase&#40;&#41;
$Purge = mktime&#40;date&#40;"H"&#41;,date&#40;"i"&#41;,0,date&#40;"m"&#41;,date&#40;"d"&#41;-30,date&#40;"Y"&#41;&#41;;
	&#123;
	
		$sql = "SELECT * FROM onomatable";
		$rs = $this->dbQuery&#40;$sql,onomavashs&#41;;
		while&#40;$row = mysql_fetch_array&#40;$rs&#41;&#41;
			&#123;
			if&#40;$Purge > $row&#91;cache&#93;&#41;
				&#123;
				$sql = "delete from onomatable where id = '".$row&#91;'id'&#93;."'";
				$this->dbQuery&#40;$sql,onomavashs&#41;;
				&#125;
			&#125;
			
		&#125;

?>
Sto Purge exo dosei timh na sta svhnei kathe 30 hmeres (-30)
Allazeis onomavashs, onomatable kai id me ta dika sou kai vevea mhn ksexaseis na kaneis thn syndesh me thn vash sou..

freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από freds » 11 Νοέμ 2005 19:57

Thanks για την απάντηση fafos

Από ότι κατάλαβα αυτή η function σβήνει όλες τις εγγραφές από τον συγκεκριμένο πίνακα και αυτό το κάνει μία φορά κάθε 30 μέρες. Φτάνει τουλάχιστον να τρέχει μία φορά κάθε μέρα από μία σελίδα με include.

Εγώ αυτό που χρειάζομαι είναι να σβήνει μόνο τις εγγραφές που έχουν παραμείνει στην βάση για 30 μέρες (ή αντίστοιχα για 60 ή 90 για κάποιες από αυτές. Αυτό θα το βρίσκω από την ημερομηνία εγγραφής και από ένα πεδίο που θα λέει πόσες μέρες θα πρέπει να παραμείνει η συγκεκριμένη εγγραφή στη βάση).

Αυτό σημαίνει ότι μία εγγραφή που είχε γραφεί πρίν 30 μέρες θα έπρεπε να διαγραφεί σήμερα ενώ μία εγγραγή που έιχε καταχωρηθεί πριν 28 μέρες θα πρέπει να διαγραφεί σε δύο μέρες.

Αυτό το 30 μέρες δεν είναι στάνταρ για όλες τις εγγραφές. Για κάποιες θα είναι 30 μέρες, για κάποιες 60 μέρες και για κάποιες 90 μέρες.

Κάνω λάθος για την function που έγραψες ή είναι έτσι όπως το λέω;

Πάντως σας ευχαριστώ για τις απαντήσεις σας.

Άβαταρ μέλους
eliaslimneos
Δημοσιεύσεις: 7
Εγγραφή: 11 Νοέμ 2005 22:21
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από eliaslimneos » 11 Νοέμ 2005 23:28

Ευτυχώς , φίλε μου, με την PHP μπορείς να κάνεις σχεδόν τα πάντα.

Η λύση λοιπόν στο πρόβλημά σου δεν είναι ούτε στα cron jobs ούτε σε κάποιο ψευδο-cron αρχείο.

Πρόσθεσε στο table σου το εξής πεδίο: timestamp int(15) NOT NULL default '0'

Κάθε φορά λοιπόν που θα κάνεις insert μια καταχώρηση στη βάση, θα δίνεις και στο πεδίο timestamp την τιμή time() , που είναι η τρέχουσα χρονική στιγμή σε δευτερόλεπτα. π.χ:

Κώδικας: Επιλογή όλων

$max_secs_to_live=2592000; //Ta defterlopepta pou exoun oi 30 meres

$now_stamp = time&#40;&#41;;
$timeout = $now_stamp - $max_secs_to_live;

$sql=mysql_query&#40;"INSERT INTO your_table &#40;`onoma`,`epitheto`,`timestamp`&#41; VALUES &#40;'elias', 'limneos', '$now_stamp'&#41;"&#41;;

$sqlcleanup=mysql_query&#40;"DELETE from your_table where timestamp<$timeout"&#41;;
Και έτσι πάντα θα σβήνονται οι εγγραφές που είναι 30 ημερών παλιές.

Αύτό είναι το πρώτο μου post σε αυτό το forum, ελπίζω να βοήθησα.
Φιλικά,

Ηλίας Λημναίος
Τελευταία επεξεργασία από το μέλος eliaslimneos την 12 Νοέμ 2005 01:03, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από Rapid-eraser » 11 Νοέμ 2005 23:57

to cron job 8a to balei gia va givete periodika n sigkekrimevi leitourgia ... oste va eivai aveksartiti
tou sivolikou kodika.

Twra n diadikasia tou pos 8a givei eivai ka8ara sxediastiki.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
eliaslimneos
Δημοσιεύσεις: 7
Εγγραφή: 11 Νοέμ 2005 22:21
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από eliaslimneos » 12 Νοέμ 2005 01:00

Προσοχή εδώ Rapid...Η διαδικασία που περιέγραψα με την διαδικασία που περιγράφεται από τον fafos δεν έχει μόνο σχεδιαστικές διαφορές , αλλά λειτουργεί εντελώς διαφορετικά.
Αυτό που ζητά ο freds είναι αυτό που δίνω στο παράδειγμα μου.
Θα μπορούσε όντως να τρέχει cron job για να εκτελείτε το 'if -then delete' κατά τακτά χρονικά διαστήματα, αλλά στην ουσία δεν χρειάζεται γιατί ήδη όταν γίνεται insert μια καταχώρηση, της δίνεται όριο ζωής 30 μέρες.
(Δηλαδή, ακόμα και αν δεν έχει ανοικτεί για π.χ. 90 μέρες η σελίδα που εκτελεί την εντολή να κάνει delete, όταν ανοιχτεί θα σβηστούν οι >=30 ημερών καταχωρήσεις.


Φιλικά,

Λημναίος

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από Rapid-eraser » 12 Νοέμ 2005 01:09

Eliaslimneos mou fevete xaveis to megalitero meros tis eikovas.

Egw dev apavtisa stov tropo pou 8a ilopiisei tnv diagrafi twv eggrafwv.
Alla tov tropo pou 8a apopspasei afti tnv leitourgeia apo tov kodika tou site oste va leitourgei asigxrova.

Skepsou avti va exeis va dior8oseis 10 eggrafes va exeis va dior8oseis
10.000 eggrafes se ka8e tetoio hit.
Dev simferei va evsomatoseis kati tetoio mesa stov kodika.
Afti eivai kai n aporia pou ekdilo8ike dld.
Dev mporeis va eisai apo pavo va patas refresh :P
Alla episis dev mporeis va fortoseis to overload tis diadikasias aftis
sto main kodika tou site.

To cron job 8a frovtisei va ektelesei kata avtistixia tov kodika, tov diko sou, n tov kodika tou fafos, n opoiodipote allo kodika (sxediastiko meros tou kodika) me kapoia dedomevi periodikotita.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
eliaslimneos
Δημοσιεύσεις: 7
Εγγραφή: 11 Νοέμ 2005 22:21
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από eliaslimneos » 12 Νοέμ 2005 02:52

Σωστά, γλυτώνει processes έτσι, αλλά με αυτό τον τρόπο έχει πάντα τον κίνδυνο να ανοίξει η σελίδα σε ένα διαστημα ενδιάμεσο των cron jobs και να δει ακόμα να υπάρχουν καταχωρήσεις > 30 ημερών, οπότε η δεδομένη περιοδικότητα που αναφέρεις θα πρέπει να είναι πολύ συχνή (ασύμφορο) για να αποδόσει.
Συνεπώς, καλό θα ήταν να υπάρχει σαν cron,π.χ. 4-5 φορές την ημέρα, για να ελαφρύνει τα υπολοιπόμενα requests, αλλά είναι απαραίτητο να γίνεται και κατά το άνοιγμα της σελίδας.
Εξάλλου με τον ίδιο τρόπο δουλεύουν και τα απλά php counters, users online κλπ... δεν "κρεμάνε" οι servers με τέτοια sql requests.
Καλό το optimization, εν ολίγοις, αλλά να γίνεται και η δουλειά που θέλουμε πρακτικά.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από Rapid-eraser » 12 Νοέμ 2005 09:09

Opos proipa to cron mporei va evergopeiei eva php meso cli (command line interface) tis php .
Afto dev divei amesi epafi me to directory pou blepei web ka8os dev xriazete va perasei apo tov browser to request.

Mia fora tnv imera eivai iper arketi gia va kaveis elegxo gia tis eggrafes. Av se evdiaferei fisika megaliteri
akribia sta apotelesmata sigoura 8a to baleis parapavo.
Twra to ti 8a trexei to cron eivai allo zitima.
To pos 8a to sxediaseis kai me pia logiki 8a ektelei ta query kai oi ipolipoi ipologismoi. Av fisika sou xriazete on-hit epeksergasia gia va miv
xaveis oute defterolepto apo tous xrovous pou exeis orisei
eivai avapofefkto oti kati tetoio 8a givei inline me tov ipolipo kodika,
av kai iparxouv texvikes pou mporeis va to trabikseis se deftero thread
oste va miv epibarivei to script sou sivolika mia diadiaksia epavalmbavomevi
se ka8e hit (opos eivai px n diadikasia tou pconect)

Evas counter kavei os epitoplisto inserts kai to users online exei va pragmateftei to poli 100 - 200 eggrafes kai oxi parapavo.

Egw milaw gia megalo ogko elegxouv va avatrekseis se megalo pivaka.

O stoxos pavtote eivai va trexouv ta script mas me oso mikrotero divato load. Otav mporeis va peraseis to cron job va treksei 6-7 to proi tote
eisai se mia periodo pou fisiologika eva site stnv ellada
dev exei toso megali kivisi.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από freds » 12 Νοέμ 2005 13:07

Επειδή με cron jobs δεν τα πάω καλά, αν κρατάω σε κάποιο πεδίο ενός πίνακα τη τιμή της ημερομηνίας που έγινε η διαγραφή και αν αυτή διαφέρει από την σημερινή ημερομηνία να τρέχει το script της διαγραφής. Αυτό σημαίνει ότι κάθε βράδυ περίπου τα μεσάνυκτα όταν θα αλλάζει η ημερομηνία και όταν τρέξει η σελίδα που περιλαμβάνει το Script τότε θα γίνεται και η διαγραφή και αυτό μόνο μια φορά γιατί από το ίδιο το script θα αλλάζω και την ημερομηνία διαγραφής. Είναι ο τρόπος που έχω ξαναπει σε προηγούμενηη απάντηση.

Το script μπορεί να περιλαμβάνει αυτό που έγραψε ο eliaslimneos. Τώρα πάντως εδώ που τα λέμε η καλύτερη λύση είναι αυτή που είπε ο Rapid-eraser, ta cron.

Βέβαια ο τρόπος ελέγχου που περιέγραψα παραπάνω είναι λίγο μπακαλίστικος, ίσως, αλλά πιστεύω ότι θα κάνει την δουλειά του και όχι με πολλούς ελέγχους.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από fafos » 12 Νοέμ 2005 15:00

To script pou sou edosa svhnei mono tis eggrafes pou einai palaioteres ton 30 hmeron... alla kalytera na leitourgei me cron job...

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από Rapid-eraser » 12 Νοέμ 2005 15:15

Exo tnv amidra evtiposi oti dev givomai katavoitos .
H diadikasia gia va sbiseis kapoies egrafes pou eivai 30 meres pio palies apo tora eivai eva sql query movo.

Afto pou protiva egw eivai avti va to esomatoseis mesa stov kodika sou kai va trexei kato apo sigkekrimeves siv8ikes, px otav kaveis insert otav kaveis allo query pros tnv basi pou simpiptei xrisi tou user , otav givei hit se kapoio php arxeio kai paralila kli8ei kai to snap tou kodika aftou ... what ever,

egw protiva va apospaseis aftov tov kodika , se aftovomi katastasi ... eva php arxeio pou kavei dld movo afto. Kavovtas xrisi tou cron (programatismeves ergasies) kai ektelovtas amesa to php arxeio mporeis va aftomatopiiseis afti tnv diadikasia.

AFTO DEN ZITISES EKSARXHS ???

To pos 8a kaveis tnv diagrafi eivai epavalambavw poli aplo, alla 8a mporouse va eivai kai poli siv8eto, apla egw protiva tov tropo gia va to aftomatopiiseis.
To pos 8a sbistei evteli n eggrafi dev to e8iksa ka8olou.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Είναι δυνατόν να γίνει η διαδικασία που περιγράφω;

Δημοσίευση από freds » 12 Νοέμ 2005 16:19

Rapid-eraser. Έγινες κατανοητός.

Και εμένα δεν με ενδιαφέρει ποιό sql ερώτημα θα τρέξει για να γίνει η διαγραφή αλλά η αυτοματοποίηση με την λιγότερη απασχόληση του server. Και την απάντηση την έχεις δώσει και είναι κατανοητή, τα crons.

Αλλά εγώ επειδή δεν ξέρω από crons γι'αυτό πρότεινα την περίπτωση ελέγχου με την ημερομηνία διαγραφής. Και αφού γίνει ο έλεγχος τότε μπορεί να τρέξει και οποιοδήποτε script, συμπεριλαμβανομένου και των scripts του fafos και του eliaslimneos, και να γίνει η διαγραφή.

Τώρα αν δεν γίνει σε εντελώς αυτόνομη κατάσταση, με cron, δεν νομίζω ότι πειράζει, έτσι δεν είναι;
Τελευταία επεξεργασία από το μέλος freds την 12 Νοέμ 2005 18:27, έχει επεξεργασθεί 1 φορά συνολικά.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες