[php] txt file van counter reset zich zelf...

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12-06 19:19
Hoi,

Ik gebruik een simpel scripje om de bezoekers te tellen, die schrijft het aantal weg naar een txt file. Ongeveer 1x per maand staat dat txt bestandje spontaan weer op 0. Iemand een idee hoe dit kan?

Ik gebruik het onderstaande scripje:

code:
1
2
3
4
5
6
7
8
9
<?
$fp=fopen("counter.txt","r");
$jumlah=fgets($fp,255);
fclose($fp);
$fw=fopen("counter.txt","w");
$temp=$jumlah+1;
$jumlah_baru=fputs($fw,$jumlah+1);
fclose($fw); 
?>


het bestand heeft chmod 666. De bezoeker moet immers kunnen schrijven.

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 12-06 18:55

Gerco

Professional Newbie

Je hebt hier een klassiek concurrency probleem :)

Waarschijnlijk proberen twee bezoekers vrijwel gelijktijdig het bestand te updaten, waardoor het corrupt raakt. De volgende keer zal PHP geen cijfer lezen uit dat bestand en met 0 gaan werken. Dan gaat de teller weer goed tot er weer twee bezoekers zijn die het bestand tegelijk updaten.

Oplossingen:
- Gebruik een database server
- Gebruik een embedded database als SQLite (tegenwoordig standaard bruikbaar met PHP).
- Doe aan locking op je bestand

[ Voor 21% gewijzigd door Gerco op 23-05-2006 10:10 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

PHP vragen hoor toch echt in /14 Programming ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12-06 19:19
BtM909 schreef op dinsdag 23 mei 2006 @ 10:12:
PHP vragen hoor toch echt in /14 Programming ;)
Zal het onthouden ;) ( hoop ik :P )


Maar er is geen andere manier om deze mooie "bug" op te vangen??

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 12-06 18:55

Gerco

Professional Newbie

Ja, je bestand locken voordat je erin gaat schrijven.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 12-06 19:19
srry las daar over heen bij je eerste post :$.

in ieder geval thnxs voor de link naar de manual, maar...

Ergens doe ik iets fout:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$fp=fopen("counter.txt","r");
$jumlah=fgets($fp,255);
fclose($fp);
$fw=fopen("counter.txt","w+");
if (flock($fw, LOCK_EX)) { //do an exclusive lock
$temp=$jumlah+1;
$jumlah_baru=fputs($fw,$jumlah+1);
flock($fw, LOCK_UN)) } //release the lock
else {
echo "" };
fclose($fw); 
?>

De hele pagina wordt nu niet meer geladen en ik kan het helaas niet vinden waar ik nu de mist in ga.
Dat zat hem in verkeerde haakjes

[ Voor 62% gewijzigd door w00d op 23-05-2006 12:42 ]

Pagina: 1