Cum faci un script care iti arata cati vizitatori au in total pe site si cati sunt online

In jos

Cum faci un script care iti arata cati vizitatori au in total pe site si cati sunt online

Mesaj Scris de RaZvAn la data de Mier Iun 02, 2010 10:36 pm

Foloseste doua fisiere principale: mini_trafic.php si mini_trafic.js si
un director "minitrafic" in care sunt stocate fisierele .txt cu datele
accesarilor (mai jos gasiti codul fiecaruia).
Cele 2 fisiere .txt
pentru stocarea datelor sunt: "ipuri.txt" si "minitrafic.txt". In primul
sunt stocate ip-urile tuturor vizitatorilor din ziua curenta, iar in
celalalt sunt salvate pe primul rand datele minitrafic-ului, iar de la
al doilea rand sunt adaugati utilizatorii online.
- Mod de
implementare

- Dupa ce creati pe server fisierele
"mini_trafic.js" si "mini_trafic.php" (in locul unde sunt fisierele
site-ului dv. in care veti folosi acest script), cu codul pe care-l
gasiti mai jos pt. fiecare, creati si directorul "minitrafic", cu
permisiuni de scriere CHMOD 0777.
- In pagina dv, unde doriti sa
includeti acest script, in locul unde vreti sa apara traficul afisat,
adaugati urmatorul cod:
Cod:
<div id="minitrafic"> </div>
<!-- script
Mini-Trafic, de la http://www.marplo.net -->
<script
src="mini_trafic.js" type="text/javascript"></script>

Cod - mini_trafic.php
Cod:
<?php
// script Mini-Trafic Site - de la
http://www.marplo.net/php-mysql
session_start();

// Defineste
Directorul si Fisiere de lucru in el
$dir = 'minitrafic/';
$file_ip
 = $dir.'ipuri.txt';
$file_minitrafic = $dir.'minitrafic.txt';   
 // Aici vor fi stocate datele mini-traficului (pe primul rand) si
vizitatorii online

$sep = '^';            // Separator de date
pt. Cookie si cele din primul rand din $file_minitrafic

date_default_timezone_set('Europe/Bucharest');
        // Seteaza zona Romania pt. definirea datei

$azi =
intval(date("d"));                    // Preia ziua curenta

//
Defineste IP-ul vizitatorului (folosit pt. Vizitatori unici)
// Daca
ip-ul e setat in cookie, impreuna cu ziua curenta la inceput, il preia
pe cel din cookie
// Altfel il adauga intr-un cookie pe cel setat de
PHP impreuna cu ziua curenta (expira in 24 ore)
$ip =
$_SERVER['REMOTE_ADDR'];
if(isset($_COOKIE['visit_unic']) &&
strpos($_COOKIE['visit_unic'], $azi)===0) {
  $ar_cookie =
explode($sep, $_COOKIE['visit_unic']);
  $ip = trim($ar_cookie[1]);
}
else
 setcookie("visit_unic", $azi.$sep.$ip, (time()+86400));

// Array
 cu o lista de 93 bots-search pe internet
$bot_list = array('Teoma',
'alexa', 'AbachoBOT', 'abcdatos_botlink', 'AESOP_com_SpiderMan',
'ia_archiver', 'Mercator', 'AltaVista-Intranet', 'Wget', 'Acoon Robot',
'AxmoRobot', 'Yellopet-Spider',
'Findexa Crawle', 'froogle',
'Gigabot', 'inktomi', 'looksmart', 'URL_Spider_SQL', 'Firefly',
'NationalDirectory', 'Ask Jeeves', 'TECNOSEEK', 'InfoSeek',
'WebFindBot', 'girafabot', 'crawler', '[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
'Googlebot',
'Scooter', 'Slurp', 'msnbot', 'appie', 'FAST', 'WebBug', 'Spade',
'ZyBorg', 'rabaz', 'Baiduspider', 'Feedfetcher-Google',
'TechnoratiSnoop', 'Rankivabot', 'Mediapartners-Google', 'Sogou web
spider',
'WebAlta Crawler', 'urlck', 'solbot', 'acme-spider',
'searchprocess', 'poppi', 'AdsBot-Google', 'Baiduspider', 'Exabot',
'FAST Enterprise Crawler', 'FAST-WebCrawler', 'http://www.neomo.de/',
'Gigabot','Google Desktop',
'heise-IT-Markt-Crawler', 'heritrix/1.',
'ibm.com/cs/crawler', 'ICCrawler - ICjobs', 'ichiro/2', 'MJ12bot',
'MetagerBot', 'msnbot-NewsBlogs', 'msnbot', 'msnbot-media', 'NG-Search',
 'http://lucene.apache.org/nutch/',
'NutchCVS', 'OmniExplorer_Bot',
'online link validator', 'psbot/0', 'Seekbot', 'Sensis Web Crawler',
'SEO search Crawler', 'Seoma', 'SEOsearch/',
'Snappy/1.1','http://www.tkl.iis.u-tokyo.ac.jp/~crawler', 'SynooBot',
'crawleradmin.t-info@telekom.de',
 'TurnitinBot', 'voyager/1.0', 'W3 SiteSearch Crawler', 'W3C-checklink',
 'W3C_*Validator', 'http://www.WISEnutbot.com', 'yacybot',
'Yahoo-MMCrawler', 'Yahoo! DE Slurp', 'Yahoo! Slurp', 'YahooSeeker');

//
 Functia care verifica daca cel care a accesat pagina e un bot, din
lista de sus
function detect_bot() {
  GLOBAL $bot_list;
 
$thebot = false;

 if(isset($_SERVER['HTTP_USER_AGENT'])) {
 
foreach($bot_list as $bot) {
   
if(stripos($_SERVER['HTTP_USER_AGENT'], $bot)!==false) { $thebot = true;
 break;}
  }
 }

  return $thebot;
}
$isbot =
detect_bot();        // Daca e false inseamna ca nu e bot

//
Functia pt. lucru cu fisierul pt. stocarea vizitatori unici azi (dupa
ip)
// Daca fisierul exista, preia randurile din el.
// Adauga
ip-ul curent in matricea cu randurile si elimina duplicatele
// Daca
fisierul nu exista, il creaza cu ip-ul curent pe un rand
function
ip_stoc($file, $ip) {
  GLOBAL $isbot;
  $rows = array($ip);

 
 // Daca fisierul exista, preia randurile din el
  // Nr. randuri
reprezinta nr. vizitatori unici
  if(is_file($file)) { $rows =
file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); }

 
// Daca nu e bot, parcurge randurile si la urma scrie in $file
 
if($isbot===false) {
  $rows[] = $ip;                      // Adauga
 ip-ul curent in matrice, la sfarsit
  $rows = array_unique($rows);
    // Elimina randurile identice

  // Transforma matricea in
sir (cu linii) si daca poate scrie in $file, seteaza sesiunea
$_SESSION['minitrafic']
  if(file_put_contents($file,
implode("\r\n", $rows))) { $_SESSION['minitrafic'] = $ip; }
  }

 
 return count($rows);          // Returneaza numarul de rand-uri (ip-uri
 stocate)
}

// Functia de lucru pt. datele stocate si
vizitatori online
function trafic_on($id_useron, $file) {
  GLOBAL
 $azi, $unici, $sep, $isbot;
  $ar_on = array(); $ad_on = 0; $online =
 1; $acum = time();

  $user_on = $id_useron.$sep.($acum+30);  //
 Randul pt. vizitatorul curent online

  if(is_file($file)) {
 
  $rows = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

 
  // Daca fisierul are cel putin un rand
    if(count($rows)>0) {
 
    // Preia data zilei, care e in prima linie (folosita pt. reset
refereri cand se trece la o noua zi)
    $row1 = $rows[0];

 
  // De la al doilea rand sunt stocati useri online
    // Daca
sunt mai mult de 1 rand in fisier, le parcurge si separa datele
   
for($i=1; $i<count($rows); $i++) { $ar_on[] = $rows[$i]; }

 
  // Prelucreaza datele pt useri_on
    for($i=0;
$i<count($ar_on); $i++) {
      $row_on = explode($sep,
$ar_on[$i]);
      if($row_on[0]===$id_useron) {
       
$ar_on[$i] = $user_on;
        $ad_on = 1;
        continue;
 
    }
      if(intval($row_on[1])<$acum) unset($ar_on[$i]);
 
    }
    if($ad_on===0) $ar_on[] = $user_on;
    $ar_on =
array_unique($ar_on);      // Elimina posibile randuri identice
   
$online = max(1, count($ar_on));  // Nr. utilizatori online
    }
 
 }
  else {
    // Seteaza datele pt. primul rand
    // azi,
acces_ieri, acces_azi, unici_ieri, unici_azi, online_azi, acces_tot,
acces_top, unici_top, online_top, timp_acces_top, timp_unici_top,
timp_online_top, timp_start
    $row1 =
$acum.$sep.'0'.$sep.'0'.$sep.'0'.$sep.'0'.$sep.'0'.$sep.'0'.$sep.'0'.$sep.'0'.$sep.'0'.$sep.$acum.$sep.$acum.$sep.$acum.$sep.$acum;
 
 }

  // Preia in Array elementele din primul rand si le
transforma in integer
  $ar_row1 = explode($sep, $row1);
 
$ar_row1 = array_map("intval", $ar_row1);

  $start =
$ar_row1[13];                  // Preluare timp start inregistrare

 
 // Daca nu e bot si primul rand are 14 elemente, actualizeaza primul
rand
  if(!$isbot && count($ar_row1)===14) {
    // Daca
nu e apelare repetitiva
  if(isset($_POST['ajax']) &&
$_POST['ajax']==='first') {
    $zi_file = intval(date("d",
$ar_row1[0]));          // Preia ziua inregistrata in fisier

   
 // Daca ziua inregistrata e diferita de cea curenta, o actualizeaza si
rescrie si datele din $file_ip
      // Actualizeaza elementele de
ieri cu cele de azi, iar la cele de azi scrie 1
   
if($zi_file!==$azi) {
      // Sterge datele din $file_ip (cu ip-uri
 pt. unici azi)
      GLOBAL $ip, $file_ip;
   
 file_put_contents($file_ip, $ip);

      // Reseteaza datele pt.
ieri si azi
      $ar_row1[0] = $acum;                    // Pt.
data de azi
      $ar_row1[1] = $ar_row1[2];              // Pt.
acces_ieri
      $ar_row1[2] = 1;                        // Pt.
acces_azi
      $ar_row1[3] = $ar_row1[4];              // Pt.
unici_ieri
      $ar_row1[4] = 1;                        // Pt.
unici_azi
      $ar_row1[5] = 1;                        // Pt.
online-acum
      $ar_row1[6]++;                          // Pt.
acces_tot
    }
    else {
      $ar_row1[0] = $acum;
 
    $ar_row1[2]++;
      $ar_row1[4] = max($unici, $ar_row1[4]);
 
    $ar_row1[6]++;

      // Pt. acces_top
   
 if($ar_row1[2]>$ar_row1[7]) {
        $ar_row1[7] = $ar_row1[2];
 
      $ar_row1[10] = $acum;
      }

      // Pt. unici_top
 
    if($ar_row1[4]>$ar_row1[8]) {
        $ar_row1[8] =
$ar_row1[4];
        $ar_row1[11] = $acum;
      }
    }
 
 }

  // Actualizeaza curenti online
  $ar_row1[5] = $online;

 
  // Pt. acces_top
  if($online>$ar_row1[9]) {
   
$ar_row1[9] = $online;
    $ar_row1[12] = $acum;
  }
  }

 
 // Creaza variabila cu datele ce trebuie scrise in fisier
 
$ad_rows[]  = implode($sep, $ar_row1);
  $ad_rows[] = implode("\r\n",
 $ar_on);

  // Creaza matricea cu datele de iesire ale functiei
 
 $re['start'] = date('j-M-Y', $ar_row1[13]);                  // Data
cand a inceput inregistrarea cu mini-trafic
  $re['acum'] =
date('j-M-Y, H:i', $ar_row1[0]);                // Data si ora curenta
 
 $re['acces_tot'] = $ar_row1[6];                              // Total
accesari ale site-ului de cand a inceput inregistrarea
 
$re['acces_top'] = $ar_row1[7];
  $re['data_acces_top'] =
date('j-M-Y', $ar_row1[10]);
  $re['acces_ieri'] = $ar_row1[1];
 
$re['acces_azi'] = $ar_row1[2];
  $re['unici_top'] = $ar_row1[8];
 
 $re['data_unici_top'] = date('j-M-Y', $ar_row1[11]);
 
$re['unici_ieri'] = $ar_row1[3];
  $re['unici_azi'] = $ar_row1[4];
 
 $re['online_top'] = $ar_row1[9];
  $re['data_online_top'] =
date('j-M-Y, H:i', $ar_row1[12]);
  $re['online'] = $ar_row1[5];

 
 // Seteaza o variabila prin care se determina permisiunea de a scrie in
 $file
  if(count($ar_row1)==14 && $ar_row1[13]==$start) $add
 = 1;
  else $add = 0;

  // Incearca sa scrie datele in $file,
 daca nu e accesare de bot si $add=1
  if(!$isbot &&
$add===1) {
  if(!file_put_contents($file, implode("\r\n",
$ad_rows), LOCK_EX)) $re = array("Nu poate scrie in fisierul $file");
 
 }

  return $re;
}

// Daca scriptul e apelat prin
$_POST['ajax']='first' si nu exista !isset($_SESSION['minitrafic']),
$unici=functia ip_stoc(), Altfel, $unici=1
$unici =
(isset($_POST['ajax']) && $_POST['ajax']==='first' &&
!isset($_SESSION['minitrafic'])) ? ip_stoc($file_ip, $ip) : 1;

//
 Seteaza un ID al vizitatorului, compus din IP_HTTP-USER_AGENT sau
IP-anonym
$id_useron = isset($_SERVER['HTTP_USER_AGENT']) ?
$ip.'_'.md5($_SERVER['HTTP_USER_AGENT']) : $ip.'_anonym';

$minitrafic
 = trafic_on($id_useron, $file_minitrafic);      // Apeleaza functia
pt. mini-trafic si useri online


/*** Returnarea datelor de
iesire (creaza variabila cu datele in cod HTML) ***/

$html =
'<div class="tr"><u>Statistici</u> <sup>start:
'.$minitrafic['start'].'</sup>
Data acum:
'.$minitrafic['acum'].
'</div>Total accesari site:
'.$minitrafic['acces_tot'].'
  - Record:
'.$minitrafic['acces_top'].'
<sup>'.$minitrafic['data_acces_top'].'</sup>
 
   
•  Ieri: '.$minitrafic['acces_ieri'].'
    •  Azi:
'.$minitrafic['acces_azi'].'

<div class="tr">- Unici
-</div>  - Record: '.$minitrafic['unici_top'].'
<sup>'.$minitrafic['data_unici_top'].'</sup>

    • 
Ieri: '.$minitrafic['unici_ieri'].'
    •  Azi:
'.$minitrafic['unici_azi'].'

  <div class="tr">- Online
-</div>  - Record: '.$minitrafic['online_top'].'
<sup>'.$minitrafic['data_online_top'].'</sup>
  •  Acum:
 '.$minitrafic['online'];

echo $html;                //
Returneaza codul din $html
?>

Cod - mini_trafic.js
Cod:
// script JS pt. Mini-Trafic Site - de la
http://www.marplo.net/php-mysql

// Functia care verifica si
creaza obiectul XMLHttpRequest in functie de browser
function
get_XmlHttp() {
  // Creaza variabila care va contine instanta la
XMLHttpRequest, initial cu valoare nula
  var xmlHttp = null;

 
 if(window.XMLHttpRequest) {      // Daca browser-ul e Forefox, Opera,
Safari, ...
    xmlHttp = new XMLHttpRequest();
  }
  else
if(window.ActiveXObject) {  // Daca browser-ul este Internet Explorer
 
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

 
return xmlHttp;
}

// Functia care trimite datele la un fisier
PHP si returneaza raspunsul
function ajax_send(par) {
  var
cerere_http =  get_XmlHttp();      // Apeleaza functia pt. crearea
instantei la obiectul XMLHttpRequest

  // Creaza datele care
trebuie trimise prin POST la scriptul PHP (perechi nume=valoare)
 
var  datele = 'ajax='+par;

  cerere_http.open("POST",
'mini_trafic.php', true);        // Creaza cererea

  // Adauga
un Header specific pentru ca datele sa fie recunoscute ca au fost
trimise prin POST
  cerere_http.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
  cerere_http.send(datele);   
  // Efectueaza trimiterea cererii, impreuna cu valorile care trebuie
transmise

  // Verifica starea cererii
  // Daca raspunsul e
primit complet
  cerere_http.onreadystatechange = function() {
 
 if (cerere_http.readyState == 4) {
    // Include raspunsul in
tag-ul cu id="trafic" doar daca par=first si nu are deja inclus minim 33
 caractere
    if(par=='first' &&
document.getElementById('minitrafic') &&
document.getElementById('minitrafic').innerHTML.length<33) {
     
 document.getElementById('minitrafic').innerHTML =
cerere_http.responseText;
    }
    }
  }
}

ajax_send('first');
                  // Apeleaza functia ajax_send(), ca prima data

//
 Auto-apeleaza functia ajax_send() la interval de 40 secunde
setInterval("ajax_send('repeat')",
 40000);

Ca sa protejati directorul in care sunt create fisierele text cu datele
traficului (aici \"minitrafic\") creati in interiorul lui un fisier
.htaccess cu urmatorul cod:
Cod:
# block everyone from accessing this folder
               
order deny,allow
                deny from all

- scriptul este gratuit, il puteti modifica si folosi dupa cum doriti.
Fiind gratuit, nu se ofera suport, dar daca aveti sesizari, opinii sau
intrebari legate de el, va rog sa postati aici.
avatar
RaZvAn
Administrator
Administrator

Data de inscriere : 01/06/2010
Varsta : 21
Localizare : Sibiu

Vezi profilul utilizatorului http://x-gaming.sudanforums.net

Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum