Subversion Repositories webcounter

Rev

Blame | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. /*
  4.  * PHP Counter mit Reloadsperre, Textdatenbank und Graphic-Libary (without Error Images)
  5.  * (C)Copyright 2010 - 2019 Daniel Marschall
  6.  * Revision: 2019-02-18
  7.  */
  8.  
  9. class VtsCounter {
  10.         private $pdo = null;
  11.  
  12.         function __construct($pdo) {
  13.                 $this->pdo = $pdo;
  14.         }
  15.  
  16.         public function clearReloadSperre($minutes) {
  17.                 if ($minutes < 1) return;
  18.                 $statement = $this->pdo->prepare("DELETE FROM counter_reloadsperre WHERE tsLastVisit < (UTC_TIMESTAMP() - INTERVAL $minutes MINUTE)");
  19.                 pdox_execute($statement);
  20.  
  21.                 # Alte Counter / Fake Counter / SQL Injection Tests löschen
  22.                 $statement = $this->pdo->prepare("DELETE FROM counter_visitors WHERE tsLastVisit < (UTC_TIMESTAMP() - INTERVAL 1 YEAR)");
  23.                 pdox_execute($statement);
  24.         }
  25.  
  26.         public function getIDfromIDStr($idstr) {
  27.                 $statement = $this->pdo->prepare("SELECT id FROM counter_visitors WHERE idstr = ?");
  28.                 pdox_execute($statement, array($idstr));
  29.                 $numrows = $statement->rowCount();
  30.                 $id = -1;
  31.                 if ($numrows == 0) {
  32.                         $statement = $this->pdo->prepare("INSERT INTO counter_visitors (idstr, tsCreated) VALUES (?, UTC_TIMESTAMP())");
  33.                         pdox_execute($statement, array($idstr));
  34.                         $id = $this->pdo->lastInsertId();
  35.                 } else {
  36.                         assert($numrows == 1);
  37.                         $row = $statement->fetch();
  38.                         $id = $row['id'];
  39.                 }
  40.                 assert($id > 0);
  41.                 return $id;
  42.         }
  43.  
  44.         public function visitCount($counter_id, $ip) {
  45.                 $statement = $this->pdo->prepare("SELECT * FROM counter_reloadsperre WHERE fk_counter = ? AND ip = ?");
  46.                 pdox_execute($statement, array($counter_id, $ip));
  47.                 $numrows = $statement->rowCount();
  48.                 if ($numrows == 0) {
  49.                         $statement = $this->pdo->prepare("INSERT INTO counter_reloadsperre (fk_counter, ip, tsLastVisit) VALUES (?, ?, UTC_TIMESTAMP())");
  50.                         pdox_execute($statement, array($counter_id, $ip));
  51.  
  52.                         $statement = $this->pdo->prepare("UPDATE counter_visitors SET counter = counter + 1, tsLastVisit = UTC_TIMESTAMP() WHERE id = ?");
  53.                         pdox_execute($statement, array($counter_id));
  54.                 } else {
  55.                         assert($numrows == 1);
  56.                         $row = $statement->fetch();
  57.                         $sperre_id = $row['id'];
  58.                         $statement = $this->pdo->prepare("UPDATE counter_reloadsperre SET tsLastVisit = UTC_TIMESTAMP() WHERE id = ?");
  59.                         pdox_execute($statement, array($sperre_id));
  60.                 }
  61.         }
  62.  
  63.         public function getCounterInfo($counter_id) {
  64.                 $statement = $this->pdo->prepare("SELECT counter, tsCreated FROM counter_visitors WHERE id = ?");
  65.                 pdox_execute($statement, array($counter_id));
  66.                 $numrows = $statement->rowCount();
  67.                 assert($numrows == 1);
  68.                 $row = $statement->fetch();
  69.                 $out = new VtsCounterInfo();
  70.                 $out->visitors = $row['counter'];
  71.                 $out->created = $row['tsCreated'];
  72.                 return $out;
  73.         }
  74.  
  75. }
  76.