Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.
Latest Topics
Topic
History
Written by
CS.IFYOUPLAY.TOP | Public (24/7) | International | German Hosting
Funny video
Muzică pe care o asculti acum
CS.ONCS.RO
Ghidul 2 al începătorului
Ieri la 7:14 pm
Ieri la 9:41 am
Ieri la 9:41 am
Lun Oct 07, 2024 7:49 am
Lun Oct 07, 2024 6:52 am






[Tutorial PHP]Monitorizarea fisierelor la download

Vezi subiectul anterior Vezi subiectul urmator In jos

[Tutorial PHP]Monitorizarea fisierelor la download Empty [Tutorial PHP]Monitorizarea fisierelor la download

Mesaj Scris de Joker Joi Apr 27, 2023 10:59 pm

Nume Tutorial:Monitorizarea fisierelor la download
Descriere:Monitorizarea fisierelor la download
Download:Nu necesita
Autor:Anonim
Propria parere:Util.
Tutorialul:

Nume Tutorial:Monitorizarea fisierelor la download
Descriere:Monitorizarea fisierelor la download
Download:Nu necesita
Autor:Anonim
Sursa (Link-ul oficial):
AFISEAZA TEXTUL
Propria parere:Util.
Tutorialul:
De curând am avut nevoie de un script care să îmi monitorizeze numărul de download-uri făcute pentru un anumit fişier. Am început să îl scriu şi rezultatul îl prezint mai jos. Pentru început, să zicem că numele fişierului este test.zip şi că îl punem pe server în directorul download. În pagina în care facem legătura la el în mod normal scriem un link de forma:

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

Pentru a putea fi monitorizat acest fişier, trebuie să apelam un script intermediar care să facă contorizarea şi apoi să ne returneze fişierul respectiv. Să zicem că scriptul de monitorizare se numeşte load.php Acest script va primi prin get ca parametru numele fişierului pe care dorim să îl descărcăm astfel:

<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 şi returnarea fişierului cerut.
Cum face asta?
Pentru asta trebuie să existe un tabel în baza de date în care se va salva datele vizitatorului şi numele fişierului.
De ce nu se salvează doar numărul de descărcări al fişierului?
Pentru că există scripturi pe net (boţi sau spideri) care indexează fiecare pagină şi pot apela de mai multe ori pe minut acelaşi link, cum este şi linkul de download, iar dacă noi salvăm în baza de date doar numărul de accesări acest lucru nu va fi real, deoarece spiderii nu descarcă fişierul, doar accesează linkul pentru indexare. (Am păţit la un spider să îmi acceseze aceeaşi pagină şi de 20 de ori pe zi, dacă nu aveam în baza de date salvate datele nu aş fi ştiut şi aş fi crezut că a fost un record la descărcatul acelui fişier în ziua respectivă)
Tabelul în baza de date ar trebui să conţină coloanele următoare:

id - nume_fisier - data_ora - ip_vizitator - browser

Id-ul va fi int autoincrement,
numele fişierului este varchar(100) - nu cred că numele fişierului va fi mai mare de 100 de caractere nu?
data_ora - standard eu o pun datetime dar voi puteţi să o puneţi în ce format doriţi să se salveze data şi ora şi minutul (în cazul când acelaşi vizitator - ip - descarcă de mai multe ori pe zi acelaşi fişier să ştim asta şi să contorizam doar numărul de descărcări unice)
ip_vizitator - varchar(15)
browser - varchar(255) - semnăturile de browser pot fi destul de lungi...

Iată 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 salvăm datele şi returnăm fişierul:
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();
 ?>

Până acum avem un fişier index.php care conţine linkul de download, apoi avem fişierul load.php cu scriptul de mai sus, şi mai avem directorul 'download' care conţine fişierul test.zip
Lipseşte scriptul care afişează numărul de descărcări 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>

Pe lângă linkul de download se va afişa şi numărul de descărcări unice efectuate (după ip). Bineînţeles că având salvările din baza de date putem face un script care să ne arate rapoarte pe zile, pe ore sau pe numele fişierului (dacă sunt mai multe fişiere).
Joker

Joker
Premium User

Medalia Topicurilor
Insigna pentru crearea a 150 de posturi !
Medalia prieteniei
Felicitari ! Această insignă se obține când ai un prieten !
Medalia grupurilor
Felicitari ! Dacă ai această insignă înseamnă că faci parte din cel puțin 4 grupuri.
Primul topic creat
Felicitari ! Ai primit aceasă insignă pentru primul tau topic făcut la noi pe forum !
Medalie de mulțumire
Felicitari ! Această insignă se obține când oferi o mulțumire !
Medalie de apreciere
Felicitari ! Această insignă se obține când ai 10 de mesaje apreciate !
Medalie participare subiecte
Insigna pentru participarea la 125 de subiecte !
Medalie de puncte
Disponibilă la 15000 de puncte!
Medalia vechimii [ani]
Ai 365 de zile de când ești alături de noi !
Pet : Test
Mesaje : 180
Puncte : 41722
Multumiri primite: : 33
Data de înscriere : 25/10/2022

Sus In jos

[Tutorial PHP]Monitorizarea fisierelor la download Empty Re: [Tutorial PHP]Monitorizarea fisierelor la download

Mesaj Scris de mindfreak. Mier Mai 03, 2023 12:13 am

Multumesc


[Tutorial PHP]Monitorizarea fisierelor la download ZE3c4Xr
mindfreak.

mindfreak.
Administrator

Medalia Topicurilor
Insigna pentru crearea a 150 de posturi !
Medalia grupurilor
Felicitari ! Dacă ai această insignă înseamnă că faci parte din cel puțin 4 grupuri.
Primul topic creat
Felicitari ! Ai primit aceasă insignă pentru primul tau topic făcut la noi pe forum !
Medalie de mulțumire
Felicitari ! Această insignă se obține când oferi o mulțumire !
Medalie de apreciere
Felicitari ! Această insignă se obține când ai 1 mesaj apreciat !
Medalie de puncte
Disponibilă la 15000 de puncte!
Utilizatori urmăriți !
Felicitari ! Urmărești 5 membrii !
Medalia vechimii [ani]
Ai 365 de zile de când ești alături de noi !
Medalia prieteniei
Felicitari ! Această insignă se obține când ai 15 de prieteni !
Medalie participare subiecte
Insigna pentru participarea la 175 de subiecte !
Pet : Rex
Mesaje : 338
Puncte : 28784
Multumiri primite: : 105
Data de înscriere : 24/10/2022
Varsta : 26

https://xtut.forummo.com

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum