praegune kellaaeg 20.06.2025 20:51:55
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
04.05.2009 20:53:07
text statistika |
|
|
Tegin omale lihtsa statistika proge, mis loeb lehtede külastusi. Andmed talletan faili. Kuid on selline viga, et aegajalt kustub see txt fail tühjaks. Viskan siia koodi, ehk oskate öelda millest see tuleb? Või on tegu mõne kurjamiga, kes faili ära kustutab? Hästi ei usuks.
<?php
$leht=$_GET['id'];
// 1 vision
// 2 HinnaVaatlus
//**************************************** statistika *************
if($leht=="vision.pri.ee"){$m="vision";}
if($leht=="foorum.hinnavaatlus.ee"){$m="hv";}
$fp=fopen("lehed.txt","r");
$stat=fgets($fp);
fclose($fp);
$vv=unserialize($stat);
$mass=$vv;
$mass[$m]=$mass[$m]+1;
$save = serialize($mass);
$fail="lehed.txt";
$fp=fopen($fail,"w");
if (flock($fp, LOCK_EX)) { // fail lukku
fputs($fp,$save);
flock($fp, LOCK_UN); // lukust lahti
}
fclose($fp);
//************************************************************************
?>
|
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
05.05.2009 01:37:30
|
|
|
See paistab kangesti selle probleemi nägu, mille jaoks kunagi ammu-ammu loodi andmebaasid, mis kogu selle failide lukustamise, avamise ja pööramise kasutaja eest peidetult ära teevad.
Muidugi tuleb kasuks ka enda harimine mitmesuguste concurrency probleemide osas... lukud kinni, lukud lahti, ootamine, kontrollid, transaktsioonide järjekorda seadmine... siis lootus, et nüüd viimaks kõik kenasti töötab... ja siis mõne aja pärast avastus, et mingitel kummalistel ja üliharva korduvatel juhtudel asi siiski feilib.
_________________ Mõistus otsas? Pane pinusse... |
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
05.05.2009 11:31:29
|
|
|
Selle asemel et üldist teooriat ajada võiks siiski üritada juhendada täpsemalt milles probleem ja kuidas lahendada Zone tasuta host näiteks baasituge jms ei paku vist eriti (sessiooni tuge isegi pole)
Põhiprobleemiks on hetkel siis see, et kui kaks kasutajat samal ajal lehte laevad ja kaks samal ajal töötavat php skripti üritavad faili näppida, on tulemuseks tühi fail. Koodis siin on küll flocki kasutatud, kuid natuke teisiti kui ma ise olen teinud, ning minul varem flocki kasutades probleemi pole tulnud.
Ise olen flock kasutanud sellises stiilis:
$sisu = file_get_contents('lehed.txt');//peaks siseselt oma lockimise asjad ära tegema kui üldse lugemisel vaja läheb
//muu kood siia
$f = fopen('lehed.txt', 'w');
flock($f, LOCK_EX);
fputs($f, "uus rida\n");
fclose($f);//fclose juba ise vabastab lockid
|
flock funktsioon on selline, mis minu teada jääb teise locki olemasolul ootama kuni teine lock vabastatakse (ootab kuni teine php skript kirjutamise lõpetab ja faili sulgeb)
Mida ise suudan välja pakkuda on see, et sa üritad olla jube agar ja locki ise vabastada, ning teed seda enne kui fail kettale kirjutatakse (flcose tehakse) ja seega tekib vahepealne limbo hetk, kus uus sisu pole kettal, aga locki ka peal pole.
Eemalda see flock($fp, LOCK_UN); sealt ära ja siis peaks kõik ilusti töötama, kuna fclose juba ise vabastabki locki, ainult et teeb seda õigel ajal, kui faili uus sisu on kettale jõudnud.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
05.05.2009 12:58:09
|
|
|
Tänud, proovin järgi.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|