Ik heb een simpel scriptje gemaakt dat een counter in een apart bestand bijhoudt, een heel simpele pageview meter dus.
Dit scriptje heb ik al een tijdje gebruikt op verschillende pagina's, en het werkt foutloos. Het enige dat moet gebeuren is een getal inlezen, dit ophogen, vervolgens wegschrijven, en returnen. Weinig aan fout te doen, lijkt me zo.
Hier het oorspronkelijke script:
Dit werkt uitstekend, dus valt er weinig te klagen.
Nu heb ik op een nieuwe pagina die ik heb gemaakt, weer dit stukje script geinclude. Op zich werkt het goed, alleen heb ik het probleem dat de counter iedere keer met twee opgehoogd is. Ik snap er niets van, omdat exact hetzelfde script het op andere pagina's wél goed doet.
Om te debuggen heb ik het volgende script gemaakt, een beetje een aanpassing van het bovenstaande, maar functioneel hetzelfde:
Wat blijkt per pageview, een overzicht van de stand van de teller gedurende het laden:
-- eerst de inhoud counter.txt: 1
-- nu inladen pagina, runnen script
-- waarde R: 1
-- waarde W: 2
-- inhoud counter.txt: 3 << what the hell?
Het probleem is dus niet dat er "per ongeluk" het counterscript tweemaal aangeroepen wordt, want anders zou ik die R en W nog ergens in de output terug moeten vinden. (bovendien alle code doorzocht en niets gevonden dat hierop wees).
Na het ophogen en wegschrijven van de counter blijkt het bestand dus een keer teveel verhoogd te zijn, wat het "hoogt per 2 op" verklaart. Maar waar dit nou vandaan komt, is me werkelijk een raadsel.
Wanneer ik als test de regel counter++ uitcomment, wordt W gelijk aan R (uiteraard), maar schrijft hij opeens ook gewoon W in counter.txt. Dan wordt de counter dus opeens helemaal niet meer opgehoogd, en bij een enkele verhoging wordt het dubbel opgehoogd weggeschreven...
Ik snap er niets van dat het op de ene pagina wél werkt, en op de andere niet... en ik kan nérgens vinden waar dit wazige probleem aan zou kunnen liggen...
Een directe oplossing zal er waarschijnlijk niet gegeven kunnen worden op dit topic, aangezien de code waarschijnlijk geen fouten bevat. Daarom is mijn vraag eerder in de trant van: waar zou ik nu nog kunnen zoeken naar een fout, die waarschijnlijk ergens anders in m'n code, of in m'n serverconfiguratie zit..?
Dit scriptje heb ik al een tijdje gebruikt op verschillende pagina's, en het werkt foutloos. Het enige dat moet gebeuren is een getal inlezen, dit ophogen, vervolgens wegschrijven, en returnen. Weinig aan fout te doen, lijkt me zo.
Hier het oorspronkelijke script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <? function counter(){ $file = fopen("counter.txt","r+"); if (!$file){ $counter= "counter_error"; } if ($counter!="counter_error"){ $counter = fread ($file, 30); fseek($file,0); fwrite($file, ++$counter, 30); fclose($file); } return $counter; } ?> |
Dit werkt uitstekend, dus valt er weinig te klagen.
Nu heb ik op een nieuwe pagina die ik heb gemaakt, weer dit stukje script geinclude. Op zich werkt het goed, alleen heb ik het probleem dat de counter iedere keer met twee opgehoogd is. Ik snap er niets van, omdat exact hetzelfde script het op andere pagina's wél goed doet.
Om te debuggen heb ik het volgende script gemaakt, een beetje een aanpassing van het bovenstaande, maar functioneel hetzelfde:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <? function counter(){ $file = fopen("counter.txt","r+"); if (!$file){ $counter= "counter_error"; } if ($counter!="counter_error"){ //inlezen teller $counter = fgets ($file); echo "R: ".$counter." "; //reset bestand fseek($file,0); //ophogen teller $counter++; //wegschrijven teller fwrite($file, $counter); fclose($file); } print "/ W: ".($counter); return $counter; } ?> |
Wat blijkt per pageview, een overzicht van de stand van de teller gedurende het laden:
-- eerst de inhoud counter.txt: 1
-- nu inladen pagina, runnen script
-- waarde R: 1
-- waarde W: 2
-- inhoud counter.txt: 3 << what the hell?
Het probleem is dus niet dat er "per ongeluk" het counterscript tweemaal aangeroepen wordt, want anders zou ik die R en W nog ergens in de output terug moeten vinden. (bovendien alle code doorzocht en niets gevonden dat hierop wees).
Na het ophogen en wegschrijven van de counter blijkt het bestand dus een keer teveel verhoogd te zijn, wat het "hoogt per 2 op" verklaart. Maar waar dit nou vandaan komt, is me werkelijk een raadsel.
Wanneer ik als test de regel counter++ uitcomment, wordt W gelijk aan R (uiteraard), maar schrijft hij opeens ook gewoon W in counter.txt. Dan wordt de counter dus opeens helemaal niet meer opgehoogd, en bij een enkele verhoging wordt het dubbel opgehoogd weggeschreven...
Ik snap er niets van dat het op de ene pagina wél werkt, en op de andere niet... en ik kan nérgens vinden waar dit wazige probleem aan zou kunnen liggen...
Een directe oplossing zal er waarschijnlijk niet gegeven kunnen worden op dit topic, aangezien de code waarschijnlijk geen fouten bevat. Daarom is mijn vraag eerder in de trant van: waar zou ik nu nog kunnen zoeken naar een fout, die waarschijnlijk ergens anders in m'n code, of in m'n serverconfiguratie zit..?
[ Voor 12% gewijzigd door jwbagger op 29-03-2005 01:09 ]