Hej,
Jag har en fil som innehar rader liknande denna:
-> 2006-09-17 22:23:28 [PAGE="/fil.tmp"] [LINE="1"] [CODE="1"] [MSG="A"] [USER="A"] [X="1"]
Det jag vill göra nu är att plocka ut sista raden, kolla dess värde i "CODE=" och om det är samma som min variabel $var ska jag uppdatera "X=" till X+1. Har suttit en stund och försökt få rätt på det och lyckats ta ut sista raden och kolla om det är samma värde i CODE men sen tar det stopp. Vet inte riktigt hur jag ska uppdatera X-värdet. Om jag ska ta bort den gamla raden och lägga till en ny eller om det går att uppdatera den gamla.
En tanke var att om det görs många laddningar av sidan så kanske det uppstår något fel om man försöker hämta och ta bort sista raden. Så kanske bör man först plocka ut sista raden och kolla dess CODE-värde och sedan uppdatera den rad som har just det CODE-värdet med. Då borde man unvidka eventuella fel om någon ny rad läggs till innan vi har hunnit uppdatera vår rad?
Saken är även den att det kan ligga 3 rader i filen där första raden har code-värde 1, andra raden code-värde 2 och den tredje code-värde 1 igen. Då ska bara den senaste uppdateras.
Det jag har testat själv:
$rader = array_reverse(file("fil.txt"));
$rader_c = $rader[0];
ereg("\[CODE=\x22([[:digit:]]+)\x22\]", rtrim($rader_c), $matches);
if ($matches[1] != $this->code)
{
// Lägg till ny rad
$string = "-> " . date("Y-m-d H:i:s") . "
[PAGE=\"" . $this->file . "\"]
[LINE=\"" . $this->line . "\"]
[CODE=\"" . $this->code ."\"]
[MSG=\"" . $this->message ."\"]
[USER=\"" . $log_user . "\"]
[X=\"1\"]\n";
$fp = fopen("fil.txt", "a");
fputs($fp,$string);
fclose($fp);
} else {
// Uppdatera senaste raden med code-värde = $this->code till x++
ereg("\[X=\x22([[:digit:]]+)\x22\]", rtrim($rader[0]), $matches);
$matches[1]++;
// Här skon klämmer
}
Jag är inte så bra på reg_exp, kanske kan man plocka ut både CODE och X i en enda koll? :)