Autor | Zpráva | ||
---|---|---|---|
Lamička Profil * |
#1 · Zasláno: 16. 5. 2009, 18:31:39
Neumím doladit jednu vychytávku: do txt souboru potřebuju zapisovat IP adresy (přístupy) jedné php stránky, zapisuju to zatím nějak takto:
$ip = $_SERVER['REMOTE_ADDR']; file_put_contents("ipecka.txt", "$ip" "\n", FILE_APPEND|LOCK_EX); Potřeboval bych ovšem, aby to zapsalo maximálně posledních 20 IP adres (řádkově pod sebe), tak aby ty nové byly na prvním řádku a starší se odmazávaly (nad 20).... |
||
AM_ Profil |
#2 · Zasláno: 16. 5. 2009, 18:43:59
$f = fopen('ipecka.txt', 'r+'); $ip = explode('\n', fread($f, filesize('ipecka.txt'))); while (count($ip) >= 20){ array_shift($ip); } fseek($f, 0); ftruncate($f, 0); $ip[] = $_SERVER['REMOTE_ADDR']; fwrite("ipecka.txt", implode('\n', $ip)); fclose($f); file_get_contents a file_put_contents nejsou vhodné, lepší je vše provést při jednom otevření, protože se může stát že skript spustí dva uživatelé paralerně a zapíší se zkreslená data. |
||
Lamička Profil * |
#3 · Zasláno: 16. 5. 2009, 19:13:10
„protože se může stát že skript spustí dva uživatelé paralerně a zapíší se zkreslená data“
Aha? to jsem netušil... díky moc !!! |
||
Nox Profil |
#4 · Zasláno: 16. 5. 2009, 21:26:54
AM_
Tvůj skript myslím taky není atomický, jestli se nepletu... alespoň podle co jsem četl u Vrány "Na první pohled je vidět, že problém je mezi funkcemi fopen a fwrite", tak by asi mohl být problém i tu http://php.vrana.cz/atomicita-operaci.php je tam jakési řešení, myslím že ten člověk docela umí, takže by to mělo být funkční |
||
Časová prodleva: 15 let
|
0