In aceasta pagina e prezentata o clasa PHP care poate fi folosita pentru inregistrare, contorizare si afisare numar de accesari fisiere, precum si data ultimei accesari pentru fiecare.
Poate fi utilizata in special pentru contorizare descarcari (contor downloads). Datele sunt salvate in tabel MySQL.
Aceasta clasa, denumita CountAccess se conecteaza la baza de date MySQL folosind extensia PHP mysqli. Are trei metode si Constructor:

- Pentru explicatii mai detaliate despre instructiunile PHP folosite in aceasta clasa, vedeti comentariile din codul ei.

Clasa CountAccess

• Sau o puteti descarca de la link-ul Download, din dreapta-sus (contine si un fisier de test).
<?php
// - Clasa CountAccess ( marplo.net )
// inregistreaza si contorizeaza numarul de accesari

class CountAccess {
  // defineste proprietati pentru numele tabelului si a coloanelor
  public $tb_name ='access';
  public $tb_cols = array('urlf'=>'urlf', 'nrac'=>'nrac', 'dt'=>'dt');

  // proprietate pt. retinerea conexiunii la MySQL
  protected $conn;

  public function __construct($server, $user, $pass, $db) {
    // creaza conexiunea la MySQL (o retine in proprietatea $conn)
    $this->conn = new mysqli($server, $user, $pass, $db);
    if(mysqli_connect_errno()){ printf("Connect failed: %s\n", mysqli_connect_error()); exit; }
    $this->conn->query('SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8";');

    // verifica daca in $db exista tabelul din $tb_name
    // daca nu exista, apeleaza metoda setTable() ca sa creeze tabelul
    $Tables_in_db ='Tables_in_'.$db;
    if($result=$this->conn->query("SHOW TABLES IN $db WHERE `$Tables_in_db` = '$this->tb_name'")){
      if(mysqli_num_rows($result)<=0) {
        $this->setTable();
        $result->close();
      }
    }
  }

  // metoda pt. crearea tabelului
  private function setTable() {
    // sql query pt. CREATE TABLE
    $sql = "CREATE TABLE `$this->tb_name` (
     `". $this->tb_cols['urlf']. "`  VARCHAR(88) PRIMARY KEY NOT NULL,
     `". $this->tb_cols['nrac']. "` INT(8) UNSIGNED DEFAULT 1,
     `". $this->tb_cols['dt']. "` TIMESTAMP
    ) CHARACTER SET utf8 COLLATE utf8_general_ci";

    // executa $sql pt. a crea tabelul, in caz de esec returneaza eroarea
    if(!$this->conn->query($sql) === TRUE) echo 'Eroare creare tabel: '. $this->conn->error;
  }

  // metoda pt. insert / update contor si data a valorii din $urlf
  public function setAccess($urlf){
    $urlf = $this->conn->real_escape_string($urlf);  // filtrare caractere speciale pentru a fi utilizate in interogare SQL

    // sql query pt. INSERT / UPDATE
    $sql = "INSERT INTO `". $this->tb_name. "` (`". $this->tb_cols['urlf']. "`) VALUES ('$urlf') ON DUPLICATE KEY UPDATE `". $this->tb_cols['nrac']. "`=`". $this->tb_cols['nrac']. "`+1";

    // transmite $sql query la serverul MySQL, in caz de esec returneaza eroarea
    if(!$this->conn->query($sql) === TRUE) echo 'Eroare: '. $this->conn->error;
  }

  // metoda pt. select numar de accesari si data ultimei accesari a valorii din $urlf
  public function getAccess($urlf){
    $urlf = $this->conn->real_escape_string($urlf);   // filtrare caractere speciale pentru a fi utilizate in interogare SQL

    // sql query pt. SELECT
    $sql ="SELECT `". $this->tb_cols['nrac']. "`, DATE_FORMAT(`". $this->tb_cols['dt']. "`, '%d-%m-%Y %H:%i') AS dt FROM `". $this->tb_name. "` WHERE `". $this->tb_cols['urlf']. "`='$urlf' LIMIT 1";
    $result = $this->conn->query($sql);  // efectueaza interogarea si retine rezultatul

    // daca $result contine cel putin un rand
    if($result->num_rows > 0){
      // adauga numar de accesari si data intr-0 variabila pt. return
      while($row = $result->fetch_assoc()) {
        $re = 'Accesari: '. $row['nrac']. ', ultima in: <i>'. $row['dt']. '</i>';
      }
    }
    else $re ='Accesari: 0, ultima in: 0';

    $result->close();  // inchide $result, pentru a elibera memoria

    return $re;  // returneaza sirul din $re
  }

  // metoda pt. select top $nr accesari
  public function topAccess($nr){
    $re ='';
    $sql ="SELECT `". $this->tb_cols['urlf']. "`, `". $this->tb_cols['nrac']. "` FROM `". $this->tb_name. "` ORDER BY `". $this->tb_cols['nrac']. "` DESC LIMIT ". intval($nr);
    $result = $this->conn->query($sql);

    // daca $result contine cel putin un rand, creaza LI cu numele din adresa
    if($result->num_rows >0){
      while($row = $result->fetch_assoc()){
        $ar = explode('/', $row['urlf']);
        $re .='<li>'. $ar[count($ar)-1] .' ('. $row['nrac']. ')</li>';
      }
    }
    $result->close();

    return '<ul>'. $re .'</ul>';
  }
}


      /* Utilizare clasa CountAccess */

// datele pt. conectare la baza de date mysql (adresa_server, utilizator, parola si nume_baza_date)
$server ='localhost';
$user ='utilizator';
$pass ='parola';
$db ='nume_baza_date';

// creaza conexiunea MySQL si o instanta de obiect la clasa CountAccess 
$objCA = new CountAccess($server, $user, $pass, $db);

// daca exista $_GET['urlf']
if(isset($_GET['urlf'])){
  $urlf = trim(strip_tags($_GET['urlf']));  // sterge tag-uri si spatii exterioare

  // apeleaza metoda setAccess() pt. insert / update numar accesari
  $objCA->setAccess($urlf);

  // Redirectioneaza browser-ul la adresa din $urlf
  header('Location: '. $urlf); exit;
}

Cum se foloseste clasa CountAccess

1.   Copiati codul de deasupra si salvati-l intr-un fisier PHP (de exemplu "class.CountAccess.php") pe server (sau descarcati clasa de la link-ul Download de sus).
2.   In acest cod (la sfarsitul lui), modificati valoarea variabilelor: $server, $user, $pass, $db, cu datele dv. pentru conectare la baza de date MySQL. Aceste variabile se gasesc dupa linia cu: "/* Utilizare clasa CountAccess */".
3.   Creati link-urile de download dupa urmatoarea formula:     - "path/class.CountAccess.php" - este calea (adresa) catre fisierul PHP in care e codul clasei CountAccess.
    - "dir/file_name.zip" - este adresa si numele fisierului pentru download.

4.   In pagina PHP unde doriti sa afisati numarul de accesari (descarcari), includeti fisierul cu aceasta clasa (cu include('class.CountAccess.php'); ).
Apoi apelati echo $objCA->getAccess($urlf);, unde $urlf este adresa si numele fisierului pentru download, acelasi folosit in link, la "href", dupa "urlf=".
                De examplu:     echo $objCA->getAccess('dir/file_name.zip');

Urmatorul exemplu arata o pagina PHP care foloseste clasa CountAccess pentru doua link-uri de download:
<?php
// include fisierul cu clasa CountAccess
include('class.CountAccess.php');
?>
<!doctype html>
<html lang="ro">
<head>
<meta charset="utf-8" />
<title>Contor Downloads</title>
</head>
<body>

<h3>Download</h3>
<!-- Link-urile de Download, prin fisierul class.CountAccess.php -->
<a href="class.CountAccess.php?urlf=download/test.zip" title="Download test">Download Test</a> - 
<?php echo $objCA->getAccess('download/test.zip'); ?>
<br>
<a href="class.CountAccess.php?urlf=download/Smile.zip" title="Download Smile">Download Smile</a> - 
<?php echo $objCA->getAccess('download/Smile.zip'); ?>
<br>
<h4>Top 3 Accesari:</h4>
<?php echo $objCA->topAccess(3); ?>

</body>
</html>
Acest cod va afisa ceva similar cu:

Download

Download Test - Accesari: 2, ultima in: 21-04-2011 18:54
Download Smile - Accesari: 3, ultima in: 21-04-2011 18:58

Top 3 Accesari:

- Sirul care arata numarul de accesari (downloads) poate fi modificat din metoda getAccess(), in clasa CountAccess.
- Formatul datei poate fi schimbat in getAccess(), la instructiunea "... DATE_FORMAT(`". $this->tb_cols['dt']. "`, '%d-%m-%Y %H:%i') ...", modificati ('%d-%m-%Y %H:%i'), daca stiti cum.

• Aceasta clasa poate fi folosita pentru inregistrare, contor si afisare numar accesari pentru orice element: link, nume, adresa de pagina (dupa un nume sau adresa URL).
    - Includeti clasa CountAccess in fisierul PHP in care doriti sa o folositi.
    - Pentru insert / update numar de accesari, apelati metoda:   $objCA->setAccess('name');
    - Pentru a afisa contorul (numarul de accesari si data), apelati:   echo $objCA->getAccess('name');
    - Ca sa afisati Topul celor mai multe $nr accesari apelati:   echo $objCA->topAccess($nr);
Exemplu:
<?php
// include fisierul cu clasa CountAccess
include('class.CountAccess.php');

$name ='o_valoare_de_tip_sir';
$objCA->setAccess($name);  // insert / update numar accesari pentru $name
echo $objCA->getAccess($name);   // afiseaza numarul de accesari si data
echo $objCA->topAccess(3);  // afiseaza top 3 accesari
?>

Clasa este gratuita si nu se acorda suport. Daca aveti intrebari sau opinii despre aceast script, puteti sa scrieti pe Forum.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Contoar downloads si accesari

Last accessed pages

  1. Zilele saptamanii - Lunile anului - Anotimpurile - Engleza (10611)
  2. Verbe frazale din limba Engleza (15272)
  3. Jokes - Glume, Bancuri, Humor (3661)
  4. Zilele saptamanii, Lunile si Anotimpuri - Exercitii incepatori (3195)
  5. Proverbe, expresii si zicatori (5908)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3644)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (3243)
  3. Gramatica limbii engleze - Prezentare Generala (2719)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2361)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (1955)