kapec gan ne Posted September 2, 2011 Report Share Posted September 2, 2011 doma ir tāda... glabāt ip adreses failā kopā ar laiku $now = time(); - laiks $ip = ip2long($_SERVER['REMOTE_ADDR']); - ip viss glabātos apmēram šādi failā (ip|time) 2130706433|1313131313\n 2130706434|1313131314\n 2130706435|1313131315\n kā labāk nolasīt failu, atrast rindu ar sekojošo ip adresi (ja tada ir) un tad ja laiks $now - time > 3600 tad izdzēst vinu no faila? Link to comment Share on other sites More sharing options...
Grey_Wolf Posted September 2, 2011 Report Share Posted September 2, 2011 (edited) kāpec gribi glabāt failā, nevis DB? un IP jebkurā gadījumā jāglabā ka INT, gan SQL gan PHP (faktiski visas prog. valodas ) to lieliski prot -> reālu IP pārvērst par INT ... PHP: IP uz INT INT uz IP SQL: IP uz INT INT uz IP Edited September 2, 2011 by Grey_Wolf Link to comment Share on other sites More sharing options...
v3rb0 Posted September 2, 2011 Report Share Posted September 2, 2011 (edited) Ja nu tiešām nav db un gribi/vajag failā, un negribi SQLite, tad Uztaisi failu - .ip-list-locked, kas nozīmēs, ka fails nolockots, nolasi ar php no faila rindiņas kuras nevajag dzēst ( file(), array_filter() ), ieraksti visu atpakaļ (implode(), file_put_contents()), nodzēs .ip-list-locked. Pirms pievienot jaunu IP jāpārbauda vai nav fails .ip-list-locked, ja ir tad jāpagaida un jāmēģina vēlreiz ( while(), time_nanosleep() ) edit: ar mazliet paplašinātākiem teikumiem.. Edited September 2, 2011 by v3rb0 Link to comment Share on other sites More sharing options...
daGrevis Posted September 2, 2011 Report Share Posted September 2, 2011 Gribēju piemetināt, ka varbūt nevajag glabāt to laiku, jo pašam failam kā tādam ir pēdējais modificēšanas laiks, ko, ja vajag, var arī "reset'ot" ar touch(). Link to comment Share on other sites More sharing options...
kapec gan ne Posted September 2, 2011 Author Report Share Posted September 2, 2011 (edited) man to laiku vajag tam lai redzētu kad tika ierakstīts šis ip db nevaru izmantot <?php function ip_valid($ip = ''){ $d = explode('.', $ip); for ($x = 0; $x < 4; $x++) if (!is_numeric($d[$x]) || ($d[$x] < 0) || ($d[$x] > 255)) return false; return $ip; } if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && ip_valid($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif($_SERVER['REMOTE_ADDR']){ $ip = $_SERVER['REMOTE_ADDR']; } else{ die('Unknown IP'); } $log = 'log.txt'; $now = time(); $ip = ip2long($ip); $tmp = array(); $count = 1; $in = fopen ("log.txt", "r+"); while ($block = fread($in, 22)) { $tmp[] = $block; if($block == "2130706433|1314972657\n") { break; } $count++; } fclose ($in); ?> piem. atrodu rindu ($count norāda uz rindas numuru). ar explode atdalu laiku no ip un salīdzinu kā vajag kā man tagad pāriet uz to rindu? fseek($in, 22*$count) ? EDIT: varētu vispār ar ftruncate notīrīt visu un $tmp array'ā veikt izmaiņas un tad ierakstīt pa jaunam visu... būs apmēram 8000 rindu tāpec diezvai tas notiks pietiekami atri Edited September 2, 2011 by kapec gan ne Link to comment Share on other sites More sharing options...
briedis Posted September 2, 2011 Report Share Posted September 2, 2011 (edited) Kā jau tika minēts, izmanto sqlite - datubāze vienā failā. Ērtai lietošanai iesaku RedBean ORM: http://redbeanphp.com/#/Tutorial Reāls piemērs: <?php require 'rb.php'; R::setup('sqlite:/tmp/dbfile.txt','user','password'); //sqlite //Pievienošana $entry = R::dispense('ips'); $entry->ip = $ip; $entry->time = time(); R::store($entry); //Drukāšana $entries = R::find('ips'); foreach($entries as $val){ echo "IP: {$val->ip}, Laiks: {$val->time}<br/>"; } Edited September 2, 2011 by briedis Link to comment Share on other sites More sharing options...
kapec gan ne Posted September 2, 2011 Author Report Share Posted September 2, 2011 (edited) paldies! nesapratu ko v3rb0 ar rakstito domaja :D iesu burties EDIT: kās var uzrakstīt vienu update query.. neizdodas apdeitot $entry->exec("update ips set time='$now' where id=1") EDIT: sapratu... no sakuma vajadzeja ieladet to # Edited September 2, 2011 by kapec gan ne Link to comment Share on other sites More sharing options...
Recommended Posts