Topic: New freeware plugin - simpleCounter v0.1 for QCMS v3.x
|
|
|
euphoria-art
2011-02-27 07:38:30
Votes: 0
|
po paru dniach mi się sam wyzerował, zlicza od początku, a więc nie jest ok
|
|
boboo
2011-02-27 14:23:25
Votes: 0
|
Czyżby brak LOCK_EX to spowodował?
-------------------------------------------------------
http://it-service.kimla.de
|
|
euphoria-art
2011-02-27 16:01:02
Votes: 0
|
przetestuje go jeszcze, jak się znowu wyzeruje to będzie trzeba go usunąć. Boboo co to jest LOCK_EX? bo nie wiem o czym piszesz
|
|
boboo
2011-02-27 17:14:32
Votes: 0
|
To jest zablokowanie pliku, przy jego nadpisywaniu. Jeśli proces jakiegoś usera zapisuje licznik z nowym stanem i w tym samym momencie inny user chce go odczytać, to zdarza się, że odczytuje "kaszanę". A w kodzie jest: jeśli nie ma arrayu Visits, to stwórz nowy wyzerowany plik (1,1). Tamten poprzednik jest już gotowy z pisaniem, ale ten następny ma w pamieci, że tego pliku nie ma i sruuu, robi nowy pusty. Jeśli byłby ustawiony lock_ex, to ów user chcący odczytać, musiałby grzecznie czekać aż poprzednik zapisze licznik i zwolni go komendą lock_un. W takim przypadku "kaszan" niejako wykluczony.
-------------------------------------------------------
http://it-service.kimla.de
|
|
euphoria-art
2011-02-27 18:19:54
Votes: 0
|
gdzie mam ten wyzerowany plik stworzyć (1,1) mam dopisać linię drugą to tamtego?
|
|
boboo
2011-02-27 19:05:05
Votes: 0
|
Poczekaj trochę, wstawię tu poprawkę. Może jeszcze dziś. Ale najpierw kolacyjka ;-)
-------------------------------------------------------
http://it-service.kimla.de
|
|
boboo
2011-02-27 20:01:08
Votes: 0
|
Zamień najlepiej całą funkcję:
function simpleCounter(){ if(is_file(DB_COUNTER)){ $aFile=file(DB_COUNTER); if(isset($aFile[1])&&!empty($aFile[1])){ $aExp=explode('$',$aFile[1]); $sDate=date('Y-m-d'); $aVisits[0]=$aExp[0]; $aVisits[1]=(!empty($aExp[2])&&$aExp[2]==$sDate)?$aExp[1]:0; } if(!isset($_COOKIE['osSimpleCounter'])){ $sSave='<?php exit;?>'."\n"; if(isset($aVisits)){ $aVisits[0]++; $aVisits[1]++; } else $aVisits=Array(1,1); @file_put_contents(DB_COUNTER,$sSave.$aVisits[0].'$'.$aVisits[1].'$'.date('Y-m-d').'$'."\ n",LOCK_EX); setcookie('osSimpleCounter',true,time()+7200); } if(isset($aVisits)) return $aVisits; else return Array(1,1); } }
Przy okazji: te 7200 to są sekundy. Czyli cookie znika po dwóch godzinach i ten sam user może znowu ci podbić licznik.
-------------------------------------------------------
http://it-service.kimla.de
|
|
boboo
2011-02-27 22:07:20
Votes: 0
|
Trzeba ciut zmienić w tym, co z onlineCountera wsadziłeś do container.tpl Z tej linijki: <span>$lang[Visits_today]: <strong>$aVistisCounter[1]</strong></span><em>$lang[Visits_all_time]: <strong>$aVistisCounter[0]</strong></em>
Zrób: <span>$lang[Visits_today]: <strong>$aVistisCounter[1]</strong></span><span>Online: <strong>$iUsersOnline</strong></span> <br/> <em>$lang[Visits_all_time]: <strong>$aVistisCounter[0]</strong></em>
-------------------------------------------------------
http://it-service.kimla.de
|
|
euphoria-art
2011-02-27 23:01:17
Votes: 0
|
dzięki boobo wszystko działa jak należy i wygląda tak jak trzeba, dzięki
|
|
Cinek.ck
2011-04-06 08:02:45
Votes: 0
|
Licznik wyzerował się pod Quick.Cms.Lite v3 i na serwerach Netarteri na paru kontach... miał już ktoś tak ? może na Netarteri jakaś blokada, limit, jak pisałem do nich już parę razy, to odpisują ze z ich strony jest wszystko ok...Ma ktoś pomysł co z tym zrobić?
-------------------------------------------------------
lordofhares.com
|
|
euphoria-art
2011-08-15 22:19:17
Votes: 0
|
boboo, funkcja wyżej nie pomogła, licznik w ostatnich dniach wyzerował mi się dwa razy
|
|
boboo
2011-08-16 06:31:46
Votes: 0
|
tu jest 'moja' funkcja: function simpleCounter(){ $sFile='db/counter.php'; $aFile=file($sFile); $sUserAgent=$_SERVER['HTTP_USER_AGENT']; if(isset($aFile[1])&&!empty($aFile[1])){ $aExp=explode('$',$aFile[1]); $sDate=date('Y-m-d'); $aVisits[0]=$aExp[0]; $aVisits[1]=(!empty($aExp[2])&&$aExp[2]==$sDate)?$aExp[1]:0; } if(!isset($_COOKIE['sCounter'])){ $sSave='<?php exit;?>'."\n"; if(isset($aVisits) &&stristr($sUserAgent,'bot')===false &&stristr($sUserAgent,'smartlinks')===false &&stristr($sUserAgent,'slurp')===false &&stristr($sUserAgent,'spider')===false){ $aVisits[0]++; $aVisits[1]++; } @file_put_contents($sFile,$sSave.$aVisits[0].'$'.$aVisits[1].'$'.date('Y-m-d').'$'."\n& quot;,LOCK_EX); @setcookie('sCounter',true,time()+7200); } if(isset($aVisits)) return $aVisits; else return Array(1,1); } wyrzuciłem z niej opcję zerowania licznika ( else $aVisits=Array(1,1); )
jak do tej pory - działa.
-------------------------------------------------------
it-service.kimla.de
|
|
euphoria-art
2011-08-16 23:40:02
Votes: 0
|
ze swojej też wyrzuciłem else $aVisits=Array(1,1); czas pokaże ;) dzięki
|
|
euphoria-art
2012-01-31 16:57:20
Votes: 0
|
co za badziew znowu sie wyzerował, Czas najwyzszy poprawić ten szajs, kiedy się ukaże wersja 0.2?
|
|
|