Pagina de start a forumului DRk.Ro


DRk.Ro
ForUm
Raspunde la subiect
Monitorizarea (contorizarea) fisierelor la download
DarKy
Administrator
Administrator

Data inscrierii: 20/Mai/2008
Mesaje: 30
Raspunde cu citat (quote)
De curând am avut nevoie de un script care sa îmi monitorizeze numarul de download-uri facute pentru un anumit fisier. Am început sa îl scriu si rezultatul îl prezint mai jos. Pentru început, sa zicem ca numele fisierului este test.zip si ca îl punem pe server în directorul download. În pagina în care facem legatura la el în mod normal scriem un link de forma:

Cod:
<a href="download/test.zip">Descarca fisierul test.zip</a>


Pentru a putea fi monitorizat acest fisier, trebuie sa apelam un script intermediar care sa faca contorizarea si apoi sa ne returneze fisierul respectiv. Sa zicem ca scriptul de monitorizare se numeste load.php Acest script va primi prin get ca parametru numele fisierului pe care dorim sa îl descarcam astfel:

Cod:
<a href="load.php?cere=test.zip">Descarca fisierul test.zip</a>


Mai departe, scriptul se va ocupa cu salvarea datelor în baza de date si returnarea fisierului cerut.
Cum face asta?
Pentru asta trebuie sa existe un tabel în baza de date în care se va salva datele vizitatorului si numele fisierului.
De ce nu se salveaza doar numarul de descarcari al fisierului?
Pentru ca exista scripturi pe net (boti sau spideri) care indexeaza fiecare pagina si pot apela de mai numeroase ori pe minut acelasi link, cum este si linkul de download, iar daca noi salvam în baza de date doar numarul de accesari acest lucru nu va fi real, pentru că spiderii nu descarca fisierul, doar acceseaza linkul pentru indexare. (Am patit la un spider sa îmi acceseze aceeasi pagina si de 20 de ori pe zi, daca nu aveam în baza de date salvate datele nu as fi stiut si as fi crezut cs a fost un record la descarcatul acelui fisier în ziua respectiva)
Tabelul în baza de date ar trebui sa contina coloanele urmatoare:

id - nume_fisier - data_ora - ip_vizitator - browser

Id-ul va fi int autoincrement,
numele fisierului este varchar(100) - nu cred ca numele fisierului va fi mai mare de 100 de caractere nu?
data_ora - standard eu o pun datetime dar voi puteti sa o puneti în ce format doriti sa se salveze data si ora si minutul (în cazul când acelasi vizitator - ip - descarca de mai multe ori pe zi acelasi fisier sa stim asta si sa contorizam doar numarul de descarcari unice)
ip_vizitator - varchar(15)
browser - varchar(255) - semnaturile de browser pot fi suficient de lungi...

Iata mai jos un exemplu:

Cod:
CREATE TABLE `download` (
`download_id` int(11) NOT NULL auto_increment,
`file_name` varchar(100) NOT NULL,
`date_time` datetime NOT NULL,
`ip` varchar(15) NOT NULL,
`browser` varchar(255) NOT NULL,
PRIMARY KEY (`download_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;


Mai departe, în scriptul de monitorizare doar salvam datele si returnam fisierul:




Cod:
<?php
// fisierul load.php
// se deschide bufferul pentru a se evita problemele cu headerele
ob_start();
// se verifica ce fisier se cere
if (isset($_GET['cere']))
    {
    $nume_fisier = mysql_real_escape_string($_GET['cere']);
    $ip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];
    // se salveaza cererea in baza de date
    $interogare = "INSERT INTO `download`
        (`file_name`, `date_time`, `ip`, `browser`) VALUES <br>
        ('$nume_fisier', NOW(), '$ip', '$browser')";
    $rezultat = mysql_query($interogare)
    // se returneaza fisierul
    echo '<meta http-equiv="refresh" content="0;URL=download/'.$nume_fisier.'" />';
    }
else
    {
    echo 'Nu a fost cerut nici un fisier';
    }
// se inchide bufferul
ob_end_flush();
?>


[b]Pâna acum avem un fisier index.php care contine linkul de download, apoi avem fisierul load.php cu scriptul de mai sus, si mai avem directorul 'download' care contine fisierul test.zip
Lipseste scriptul care afiseaza numsrul de descarcari efectuate. Scripul acesta poate fi inclus în index.php astfel:




Cod:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<a href="load.php?cere=test.zip">Descarca fisierul test.zip </a>
<?php
$conectare = mysql_connect('localhost', 'root', '');
mysql_select_db('nume_baza_date', $conectare);
$comanda_sql = "SELECT count(*) FROM `download` GROUP BY `ip`";
$interogare_sql = mysql_query($comanda_sql);
$total = mysql_result($interogare_sql, 0);
echo $total.' descarcari';
?>
</body>
</html>
[/b]
Vezi profilul utilizatoruluiTrimite mesaj privat
Monitorizarea (contorizarea) fisierelor la download
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum
Ora este GMT + 2 ore  
Pagina 1 din 1  

  
  
 Raspunde la subiect