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:
<?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; }
<?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:
<?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 ?>
<input type="number" name="points" min="5" max="80" />
#id { filter:alpha(opacity=40); /* for IE */ opacity:0.4; }
var num = 12.84567; alert( num.toPrecision(3) ); // 12.8
$lang =[10=>"PHP", 20=>"JavaScript", "site"=>"coursesweb.net"); shuffle($lang); var_export($lang); // array (0=>"coursesweb.net", 1=>"PHP", 2=>"JavaScript")
She is the best in our class. - Ea este cea mai buna din clasa noastra.
Él es el mejor en nuestra clase. - El este cel mai bun din clasa noastra.