Cum faci un script care iti arata cati vizitatori au in total pe site si cati sunt online
Cum faci un script care iti arata cati vizitatori au in total pe site si cati sunt online
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 - mini_trafic.php
Cod - mini_trafic.js
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:
- 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.
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.
Subiecte similare
» Cum sa iti faci un site(tb sa stiti cat de cat engleza)
» Cum aflu pe cati biti este sistemul? 32-bit? 64-bit?
» Texte HTML (cum sa faci scrisul mai dinamic)
» Cum faci o adresa DNS (host) pentru serverul tau Counter strike 1.6
» Sit de filme online
» Cum aflu pe cati biti este sistemul? 32-bit? 64-bit?
» Texte HTML (cum sa faci scrisul mai dinamic)
» Cum faci o adresa DNS (host) pentru serverul tau Counter strike 1.6
» Sit de filme online
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum