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 - 2017 Daniel Marschall
  6.  * Revision: 2017-05-14
  7.  */
  8.  
  9. error_reporting(E_ALL | E_NOTICE);
  10. assert_options(ASSERT_ACTIVE, true);
  11. assert_options(ASSERT_BAIL, true);
  12.  
  13. if (!file_exists(__DIR__ . '/config/config.inc.php')) {
  14.         die('Please edit config/config_dist.inc.php and then rename it to config/config.inc.php !');
  15. }
  16.  
  17. require_once __DIR__ . '/config/config.inc.php';
  18. require_once __DIR__ . '/includes/functions.inc.php';
  19. require_once __DIR__ . '/includes/VtsCounterTheme.class.php';
  20. require_once __DIR__ . '/includes/VtsCounter.class.php';
  21. require_once __DIR__ . '/includes/VtsCounterInfo.class.php';
  22.  
  23. if ((!isset($_REQUEST['id'])) || ($_REQUEST['id'] == '')) {
  24.         die('Argument "id" is missing');
  25. }
  26.  
  27. if ($_REQUEST['id'] == 'demo') {
  28.         $visitors = isset($_REQUEST['demo']) ? $_REQUEST['demo'] : 123456;
  29.         $created = '2017-05-04 00:00:00';
  30. } else {
  31.         $pdo = new PDO(PDO_HOST, PDO_USER, PDO_PASS);
  32.         $c = new VtsCounter($pdo);
  33.         $c->clearReloadSperre(RELOADSPERRE_MINS);
  34.         $counter_id = $c->getIDfromIDStr($_REQUEST['id']);
  35.         $c->visitCount($counter_id, fetchip());
  36.         $info = $c->getCounterInfo($counter_id);
  37.         $visitors = $info->visitors;
  38.         $created = $info->created;
  39. }
  40. $querytime = gmdate('Y-m-d\TH:i:s\Z'); // ISO 8601
  41. $created = date('Y-m-d\TH:i:s\Z', strtotime($created));
  42.  
  43. /*
  44. // No caching
  45. header("HTTP/1.1 200 OK");
  46. header("Expires: Thu, 24 Dec 1987 08:30:00 GMT");
  47. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  48. header("Cache-Control: no-store, no-cache, must-revalidate");
  49. header("Cache-Control: post-check=0, pre-check=0", false);
  50. header("Pragma: no-cache");
  51. */
  52.  
  53. $etag = md5($visitors . $_SERVER['QUERY_STRING']);
  54. header("ETag: $etag");
  55. if (anyTagMatched($etag)) {
  56.         header("HTTP/1.1 304 Not Modified");
  57.         die();
  58. } else {
  59.         header("HTTP/1.1 200 OK");
  60. }
  61.  
  62.  
  63. $format = isset($_REQUEST['format']) ? $_REQUEST['format'] : 'graphic';
  64.  
  65. if ($format == 'graphic') {
  66.         $theme = isset($_REQUEST['theme']) ? preg_replace('/[^a-z0-9_\-]/', '', $_REQUEST['theme']) : null;
  67.  
  68.         if (is_null($theme)) die('Parameter "theme" is missing');
  69.  
  70.         $themeFile = __DIR__ . "/themes/$theme/theme.inc.php";
  71.  
  72.         if (!file_exists($themeFile)) die("Theme '$theme' does not exist.");
  73.  
  74.         $themeObj = null;
  75.         include $themeFile;
  76.         assert(!is_null($themeObj));
  77.  
  78.         $hue = isset($_REQUEST['hue']) ? $_REQUEST['hue'] : 0;
  79.         $themeObj->outputCounterImage($visitors, 'png', $hue);
  80. } else if ($format == 'silent') {
  81.         // nothing
  82. } else if ($format == 'spacer') {
  83.         header('Content-Type: image/png');
  84.         readfile(__DIR__ . '/spacer.png');
  85. } else if ($format == 'plaintext') {
  86.         header('Content-Type: text/plain');
  87.         echo $visitors;
  88. } else if ($format == 'json') {
  89.         header('Content-Type: application/json');
  90.         $out = array();
  91.         $out['created'] = $created;
  92.         $out['querytime'] = $querytime;
  93.         $out['visitors'] = $visitors;
  94.         echo json_encode($out);
  95. } else {
  96.         die('Argument "format" must be either graphic, silent, spacer, plaintext or json');
  97. }
  98.