Αυτόματη διαγραφή παλιών δεδομένων.

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

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

Απάντηση
Άβαταρ μέλους
xerver
Δημοσιεύσεις: 9
Εγγραφή: 08 Νοέμ 2006 22:36

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από xerver » 15 Δεκ 2008 19:39

Γειά και χαρά σε όλους...
Ας υποθέσουμε ότι αποθηκεύονται σε ένα text αρχείο κάποια δεδομένα,
θα ήθελα αν είναι δυνατό να διαγράφονται αυτόματα όλα τα δεδομένα (γραμμές) που αφορούν ημερομηνίες πριν την σημερινή!
Αν υποθέσουμε ότι σήμερα είναι 8 Δεκεμβρίου, θέλω να παραμείνουν μόνο οι 4 τελευταίες γραμμές...
Και κάθε φορά αυτό να γίνεται αυτόματα με το πρώτο άνοιγμα του script την καινούργια ημέρα.
Ζητάω πολλά;

παράδειγμα: ( ip|date )

79.107.35.141|7December2008
45.62.210.233|7December2008
185.75.220.208|7December2008
53.25.110.68|7December2008
49.107.94.63|8December2008
252.152.50.11|8December2008
261.59.70.12|8December2008
101.42.46.242|8December2008

thanks,
Τελευταία επεξεργασία από το μέλος xerver την 15 Δεκ 2008 21:12, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από p_pan » 15 Δεκ 2008 20:10

Γιατι να το κανεις σε txt αρχειο και οχι σε μια βαση?
Αγράματος...

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από p_pan » 15 Δεκ 2008 20:16

θα ειναι καπως ετσι:

Το τραπεζι:

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

CREATE TABLE `ip` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`ip` TEXT NOT NULL ,
`date` DATE NOT NULL ,
PRIMARY KEY ( `id` ) 
) TYPE = MYISAM ;

Και το παρακατω το βαζεις στην σελιδα που θες να κανει την διαγραφη!

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

$host="localhost"; // Host name
$username="name"; // Mysql username
$password="pass"; // Mysql password
$db_name="my_db"; // Database name
$tbl_name="ip"; // Table name

// Connect to server and select databse
mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");

// Find the date
$hmera = date("Y-m-d");

// Do the delete
$sql="DELETE FROM $tbl_name WHERE date<$hmera";
$result=mysql_query&#40;$sql&#41;;

Απλα και ευκολα!
Αγράματος...

Άβαταρ μέλους
xerver
Δημοσιεύσεις: 9
Εγγραφή: 08 Νοέμ 2006 22:36

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από xerver » 15 Δεκ 2008 21:17

Εντάξει p_pan σίγουρα η χρήση μιας βάσης δεδομένων, έχει κάποια προτερήματα αλλά και μερικά μειονεκτήματα σε σχέση με την αποθήκευση σε απλά flatfiles.
Στην προκειμένη περίπτωση αναγκαστικά θα χρησιμοποιήσω txt και γι' αυτό σε παρακαλώ ας ξεχάσουμε την χρήση sql προσωρινά...!
Μήπως μπορείς να με βοηθήσεις σε αυτό,
οποιαδήποτε βοήθεια θα είναι ευπρόσδεκτη.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από p_pan » 15 Δεκ 2008 21:48

No den etuxe pote na kano xrisei txt file me php..!!
Αγράματος...

Άβαταρ μέλους
xerver
Δημοσιεύσεις: 9
Εγγραφή: 08 Νοέμ 2006 22:36

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από xerver » 15 Δεκ 2008 21:59

ok, φίλε p_pan
σ' ευχαριστώ για την βοήθειά σου!
Καμιά άλλη πρόταση ;

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από korgr » 16 Δεκ 2008 00:21

Το script που παραθέτω έχει την δομή που θες με την διαφορά πως καταγράφει την χρονική στιγμή σε timestamp και κάνει αυτόματο καθαρισμό στηριζόμενο στην μεταβλητή timer που ορίζεται σε λεπτά.
Συγκεκριμένα διαγράφει οτιδήποτε έχει καταγραφεί και είναι παλαιο΄τερο από τα τελευταία 15 λεπτά (αυτό το ορίζεις εσύ από την μεταβλητή)
Επί της ουσίας είναι ένα script που παρουσιάζει τους online users στη σελίδα κατά τα τελευταία 15 λεπτά.
Ίσως σου δώσει κάποια ιδέα για αυτό που θες να κάνεις...

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

$timer=15; // ανά πόσα λεπτά να γίνεται η αυτόματη διαγραφή
$filename="log.txt"; // σε αυτό το flat file αποθηκεύονται τα δεδομένα &#40;πρέπει να ορισθούν τα κατάλληλα permissions
if &#40;!$datei&#41; $datei = $filename;
$time = @time&#40;&#41;;
$ip = $_SERVER&#91;"REMOTE_ADDR"&#93;;
$string = "$ip|$time\n";
$a = fopen&#40;"$filename", "a+"&#41;;
fputs&#40;$a, $string&#41;;
fclose&#40;$a&#41;;

$timeout = time&#40;&#41;-&#40;60*$timer&#41;;

$all = "";
$i = 0;
$datei = file&#40;$filename&#41;;
for &#40;$num = 0; $num < count&#40;$datei&#41;; $num++&#41; &#123;
	$pieces = explode&#40;"|",$datei&#91;$num&#93;&#41;;

		if &#40;$pieces&#91;1&#93; > $timeout&#41; &#123;
			$all .= $pieces&#91;0&#93;;
			$all .= ",";
		&#125;
	$i++;
&#125;

$all = substr&#40;$all,0,strlen&#40;$all&#41;-1&#41;;
$arraypieces = explode&#40;",",$all&#41;;
$useronline = count&#40;array_flip&#40;array_flip&#40;$arraypieces&#41;&#41;&#41;;

// Delete
$dell = "";
for &#40;$numm = 0; $numm < count&#40;$datei&#41;; $numm++&#41; &#123;
	$tiles = explode&#40;"|",$datei&#91;$numm&#93;&#41;;
		if &#40;$tiles&#91;1&#93; > $timeout&#41; &#123;
			$dell .= "$tiles&#91;0&#93;|$tiles&#91;1&#93;";
		&#125;
&#125;

if &#40;!$datei&#41; $datei = $filename;
$time = @time&#40;&#41;;
$ip = $_SERVER&#91;"REMOTE_ADDR"&#93;;
$string = "$dell";
$a = fopen&#40;"$filename", "w+"&#41;;
fputs&#40;$a, $string&#41;;
fclose&#40;$a&#41;;

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από Banavas » 16 Δεκ 2008 14:00

Mήπως να χρησιμοποιούσες ένα cronjob και να διαγράφει όλο το περιεχόμενο κάθε μέρα στις 21:59;
Happy coding....
Μάρκος
http://lasernet.gr

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

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από Rapid-eraser » 16 Δεκ 2008 14:22

Αυτό θα έλεγα εναπόκειται καθαρά στο τι όγκο πληροφορίας και πόσο συχνά ανανεώνονται τα data.

Πχ αν μια φορά την ημέρα (x,y,z times) είναι αρκετό αυτό το refresh προφανώς είναι σωστότερο η διαγραφή να γίνετε μέσω corn. Αν χρειάζεσαι όμως άμεση ανανέωση τότε πρέπει να γίνει script based υλοποίηση και να τρέχει παράλληλα με το script σου.
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

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από Banavas » 16 Δεκ 2008 14:55

θα ήθελα αν είναι δυνατό να διαγράφονται αυτόματα όλα τα δεδομένα (γραμμές) που αφορούν ημερομηνίες πριν την σημερινή!
Ένα cron που θα διαγράφει τα περιεχόμενα κάθε μέρα στις 21:59 θα κάνει ακριβώς αυτό που ζητάει.
Δηλαδή θα διαγράφει όλες τις εγγραφές της ημέρας ακριβώς στο τέλος της ημέρας.
Όποτε και αν ανοίξεις το αρχείο θα έχει μόνο σημερινές εγγραφές χωρίς να λείπει καμμία και δεν θα έχει χθεσινές εγγραφές, ανεξαρτήτως όγκου data.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από Alice_Cooper » 19 Δεκ 2008 02:05

21:59????
mhpos 23:59???

synexizontas ... symfono me to cron ...
ektos kai an krataei kai time to script kai svhnei oti einai px 6 ores piso ...
pou mpenei aneta stin arxh tou script h diagrafh kai meta synexizei tin doulia tou.

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από Banavas » 19 Δεκ 2008 07:29

Alice_Cooper έγραψε:21:59????
mhpos 23:59???
Σωστός :-?

Επίτιδες έκλεψα δυο ώρες για να δώ αν θα το παρατηρήσει κανένας. :D :D :D
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από korgr » 19 Δεκ 2008 09:16

Συγνώμη αλλά επειδή είμαι παντελώς άσχετος με linux, cron jobs κλπ θα ήθελα να ρωτήσω:
οκ, να προγραμματίσεις ένα task για διαγραφή κάποιου/κάποιων αρχείων (πχ log files) με βάση το date & time creation/modification.
Πως όμως από ένα αρχείο θα κρατήσει κάποιες γραμμές και θα σβήσει κάποιες άλλες? Πάλι κάποιο script σαν τα php scripts δεν πρέπει να κληθεί ώστε να γίνει η δουλειά;
sorry αν ακούγομαι χαζός, αλλά ειλικρινά δεν το κατανόησα πως μπορεί να γίνει με cron job :roll:

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από ThyClub » 19 Δεκ 2008 10:09

Η πρόταση είναι στο τέλος της ημέρας ο κρον να σβήνει όλες τις εγγραφές του αρχείου. Έτσι απο τις 00:00 και μετά θα μπορούν να μπούν μόνο σημερινές εγγραφές.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Αυτόματη διαγραφή παλιών δεδομένων.

Δημοσίευση από korgr » 19 Δεκ 2008 12:58

ok thanks :wink:

Απάντηση

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

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

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