Topic: Online Txt

Sveiki! Iškilo problema su online....
Kaip sukurti tikslų online nenaudojant mysql,o txt? Niekaip nesigauna...Vis prirašo dvigubai online negu turi būti...
Online apie 100-150,tai psl dažnai perkraunamas ir vienu metu vygdomi tie patys veiksmai.

Re: Online Txt

Su online nėr jokių problemų, aš esu online ..

Re: Online Txt

Kalbėk į temą o ne nesamones skaldyk.

Re: Online Txt

Exploder wrote:

Kalbėk į temą o ne nesamones skaldyk.

Koks tavo klausimas buvo, taip tau ir atsake.

Be to, kas yra tikslus online? jei zmogus nedare 5-10 min refresho, tai jis pas tave jau nebe online ar online?

P.S. jei nori gauti issamu atsakyma, tai gal pir uzduok ir normalu, tikslu ir issamu klausima.

Re: Online Txt

štai online skriptas:

function online($kas) {
   
    $on_failas = "txt_files/online.txt";
    $time = time();
    $time_out = 120;
    $timeout = $time - $time_out;
    $arr = file($on_failas);
   
    $h = fopen($on_failas,"a");
    $fp = fopen($on_failas,"w+");
    fwrite($fp,"");
    fclose($fp);
       
    for($ix = 0; $ix < count($arr); $ix ++) {
   
        list($name,$time_failo) = explode("|",$arr[$ix]);
           
        if($name != "") {
       
            if($name != $kas) {
               
                if($time_failo > $timeout) {
                   
                    fwrite($h,$arr[$ix]);
               
                }
               
             }
           
         }
       
     }
       
    fclose($h);
       
    $irasas = "$kas|$time|\n";
       
    $fp2 = fopen($on_failas,"a+");
    fwrite($fp2,$irasas);
    fclose($fp2);
   
}

Man jis prirašo į online dvigubai daugiau nei reikia...

Re: Online Txt

Tavo scripte nėra jokio kodo, kuri tikrintų/valdytų failų užrakinimus (lock'us), tokiu atveju pas tave didelė tikimybė, kad bus pažeistas duomenų integralumas (nes konkurenciniai procesai vienu metu gali rašyt į failą).

Re: Online Txt

Exploder wrote:

Man jis prirašo į online dvigubai daugiau nei reikia...

Tie patys žmonės kartojasi po du kartus?

Re: Online Txt

Jo,tie patys žmonės kartojasi du kartus.

Re: Online Txt

Exploder wrote:

Jo,tie patys žmonės kartojasi du kartus.

čia tu tą script'ą pats rašei? Nes jame yra klaidų.

Gali prie kiekvienos scripto eilutės prirašyti po komentarą, pasakantį ką ta eilutė daro? (-;

Re: Online Txt

minde wrote:
Exploder wrote:

Jo,tie patys žmonės kartojasi du kartus.

čia tu tą script'ą pats rašei? Nes jame yra klaidų.

Gali prie kiekvienos scripto eilutės prirašyti po komentarą, pasakantį ką ta eilutė daro? (-;

Skriptą radau ir persidariau pagal save. O kur klaidos aš ir bandau išsiaiškinti.

Re: Online Txt

Exploder wrote:
minde wrote:
Exploder wrote:

Jo,tie patys žmonės kartojasi du kartus.

čia tu tą script'ą pats rašei? Nes jame yra klaidų.

Gali prie kiekvienos scripto eilutės prirašyti po komentarą, pasakantį ką ta eilutė daro? (-;

Skriptą radau ir persidariau pagal save. O kur klaidos aš ir bandau išsiaiškinti.

Klaidų nerasi, jeigu nesuprasi, ką tas scriptas daro. Gali paaiškinti, kodėl yra 3 fopen() ir viena file() funkcijos scripte?

Re: Online Txt

Ne nu tu kietas... Aš gi ir atėjau prašyt surast tą klaidą. 1fp atidarau failą įrašymui ir perrašau time egzistuojančių online,su antru išvalau jį,su trečiu įrašau į online.

Re: Online Txt

Exploder wrote:

Ne nu tu kietas... Aš gi ir atėjau prašyt surast tą klaidą.

Tai niekas gi tau netrukdo klaidas išmoksi susirasti pačiam. Svetimam žmogui analizuoti kažkieno kreivą kodą yra N kartų sunkiau negu tau pačiam, turint omeny, kad nesi nei komentarų parašęs, nei nušvietęs kokiu principu veikia tas scriptas.

Exploder wrote:

1fp atidarau failą įrašymui ir perrašau time egzistuojančių online,su antru išvalau jį,su trečiu įrašau į online.

Pagal mane toks orientacinis scriptas, be konkurentinių rašymų tikrinimo (file lock) turėtų atrodyto taip:

<?php
define("_ONLINE_FAILAS",    "online.txt"); // reikia rasymo teisiu
define("_ONLINE_TIMEOUT",    120); // sekundemis

function online($kas){
    // laiko is sistemos paemimas ir paskaiciavimas, nuo kada irasai laikomi pasene
    $laikas        = time();
    $timeout    = $laikas - _ONLINE_TIMEOUT;
    
    // duomenu nuskaitymas ir konvertavimas i masyva
    $duomenys    = file_get_contents(_ONLINE_FAILAS);
    $masyvas    = unserialize($duomenys);
    
    // jeigu rezultatas nemasyvas - sukuriam (pradini variantas arba kitos klaidos)
    if(!is_array($masyvas)){
        $masyvas = array();
    }
    
    // irasom/pakeiciam esamo vartotojo laika
    $masyvas[$kas] = $laikas;
    
    // istrinam is masyvo visus irasus, kurie yra pasene
    foreach($masyvas AS $kas => $laikas){
        if($laikas < $timeout){
            unset($masyvas[$kas]);
        }
    }
    
    // duomenu issaugojimas faile
    $duomenys = serialize($masyvas);
    file_put_contents(_ONLINE_FAILAS, $duomenys);
}

// testavimas
online("testas1");
online("testas2");
online("testas3");
?>

14 (edited by Exploder 2009-11-25 11:14:42)

Re: Online Txt

Krč susikūriau savo,tik nežinau ar gerai viskas. įvertinkit:

function online($useris) {
   
    $time = time();
    $time_out = $time + 180;
   
    $fp = fopen("txt_files/online/$useris.txt","w");
    fwrite($fp,$time_out);
    fclose($fp);
   
    $glob = glob("txt_files/online/*");
    $sk = count($glob);
   
    for($ii = 0; $ii < $sk; $ii ++) {
   
        if(file_get_contents($glob[$ii]) < $time) {
       
            @unlink($glob[$ii]);
       
        }
       
    }
   
}

Re: Online Txt

Visada dar yra būdas skaičiuoti sesijas per cookius: http://www.devarticles.com/c/a/PHP/The- … ith-PHP/1/

Re: Online Txt

minde wrote:

Visada dar yra būdas skaičiuoti sesijas per cookius: http://www.devarticles.com/c/a/PHP/The- … ith-PHP/1/

Su cookies nelabai išeis wap'e. O tavo skriptą nagrinėjau,tai gal ir neblogai sugalvojai. Išbandysiu.

Re: Online Txt

Exploder wrote:
minde wrote:

Visada dar yra būdas skaičiuoti sesijas per cookius: http://www.devarticles.com/c/a/PHP/The- … ith-PHP/1/

Su cookies nelabai išeis wap'e. O tavo skriptą nagrinėjau,tai gal ir neblogai sugalvojai. Išbandysiu.

štai ką man įrašo tavo skriptas:

a:1:{s:0:"";i:1259141259;}

čia kas tokio? :D

Re: Online Txt

Exploder wrote:
Exploder wrote:
minde wrote:

Visada dar yra būdas skaičiuoti sesijas per cookius: http://www.devarticles.com/c/a/PHP/The- … ith-PHP/1/

Su cookies nelabai išeis wap'e. O tavo skriptą nagrinėjau,tai gal ir neblogai sugalvojai. Išbandysiu.

štai ką man įrašo tavo skriptas:

a:1:{s:0:"";i:1259141259;}

čia kas tokio? :D

Serializuotas masyvas.

Re: Online Txt

Niekada nenaudojau šių funkcijų. Tai kaip ištraukt online,pamatyt?

Re: Online Txt

Gali modifikuoti tą pačią funkciją, kad papildomao grąžintų, kiek yra prisijungusių varotojų, reiktėtų pridėti vieną eilutę funkcijos pabaigoje.

return count($masyvas);

Tada funkcijos rezultate turėsi tai, ko tau reikia. O kaip gauti masyva tai turėtum matyti scripte..