Subversion Repositories webcounter

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/trunk/ref/gold (from mod_coolhits_1.5.0)/0.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/1.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/2.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/3.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/4.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/5.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/6.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/7.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/8.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/9.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/gold (from mod_coolhits_1.5.0)/sample.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/ref/sword18.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/src/Gold-Numbers.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/src/Sword.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/data/.htaccess
0,0 → 1,2
Order Deny,Allow
Deny From All
/trunk/web/data/myuser/counter.txt
0,0 → 1,0
61636
/trunk/web/data/myuser/ips.txt
--- trunk/web/index.php (nonexistent)
+++ trunk/web/index.php (revision 2)
@@ -0,0 +1,234 @@
+<?php
+
+/*
+ * PHP Counter mit Reloadsperre, Textdatenbank und Graphic-Libary (without Error Images)
+ * (C) 2010 Daniel Marschall
+ */
+
+define('VERSION', '2010-07-05 20:05');
+
+// Usage
+
+// index.php --> shows Counter PNG
+// index.php?mode=blind --> only logs the visit and show only a PNG spacer
+// index.php?mode=text --> show text only
+
+error_reporting(E_ALL | E_NOTICE);
+
+$USER = isset($_GET['user']) ? $_GET['user'] : '';
+$THEME = isset($_GET['theme']) ? $_GET['theme'] : '';
+$MODE = isset($_GET['mode']) ? $_GET['mode'] : '';
+
+$USER = str_replace('.', '', $USER);
+$THEME = str_replace('.', '', $THEME);
+
+// Einstellungen
+
+define('USER_DIR', 'data/'.$USER.'/');
+define('THEME_DIR', 'themes/'.$THEME.'/');
+
+define('COUNTER_FILE', USER_DIR.'counter.txt');
+define('STELLEN', 6);
+
+define('IP_FILE', USER_DIR.'ips.txt');
+define('RELOADSPERRE_AKTIV', true);
+define('RELOAD_MINUTES', 10);
+
+define('DIGIT_PREFIX', THEME_DIR.'digit_');
+define('DIGIT_SUFFIX', '.png');
+define('BG_IMG', THEME_DIR.'bg.png');
+define('SPACER', 'spacer.png');
+define('SETTINGS', 'settings.inc.php');
+
+// Beginn Programmcode
+
+if ($USER == '') {
+ echo '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
+ echo '<html>';
+ echo '<head>';
+ echo '<title>Counter by Daniel Marschall</title>';
+ echo '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">';
+ echo '</head>';
+ echo '<body>';
+ echo '<h1>Counter by Daniel Marschall</h1>';
+ echo '<p>Version '.VERSION.'</p>';
+ echo '<h2>Usage</h2>';
+ echo '<p><b>?user=[username]&amp;theme=[theme]</b> -- shows the graphic counter</p>';
+ echo '<p><b>?user=[username]&amp;mode=text</b> -- shows the text counter</p>';
+ echo '<p><b>?user=[username]&amp;mode=blind</b> -- shows a hidden spacer image</p>';
+ echo '<h2>Available themes</h2>';
+ echo '<ul>';
+ foreach(glob('themes/*', GLOB_ONLYDIR) as $dir) {
+ $dir = str_replace('themes/', '', $dir);
+ echo '<li>'.$dir.'</li>';
+ }
+ echo '</ul>';
+ echo '<h2>Available users</h2>';
+ echo '<ul>';
+ foreach(glob('data/*', GLOB_ONLYDIR) as $dir) {
+ $dir = str_replace('data/', '', $dir);
+ echo '<li>'.$dir.'</li>';
+ }
+ echo '</ul>';
+ echo '<h2>Want a counter too?</h2>';
+ echo '<p>Ask Daniel Marschall: info at daniel-marschall dot de.</p>';
+ echo '</body>';
+ echo '</html>';
+ die();
+}
+
+if (!is_dir(USER_DIR)) {
+ die('User "'.$USER.'" does not exist');
+}
+
+if (($MODE != 'blind') && ($MODE != 'text')) {
+ if ((!is_dir(THEME_DIR)) || ($THEME == '')) {
+ die('Theme "'.$THEME.'" does not exist');
+ }
+ if (file_exists(THEME_DIR.SETTINGS)) {
+ include(THEME_DIR.SETTINGS);
+ }
+}
+
+if (!file_exists(COUNTER_FILE)) {
+ // Die Datei counter.txt existiert nicht, sie wird neu angelegt und mit dem Wert 0 gef├╝llt.
+ $fp = fopen(COUNTER_FILE, 'w');
+ $zahl = "0";
+ fputs($fp, $zahl, STELLEN);
+ fclose($fp);
+}
+
+if (!file_exists(IP_FILE)) {
+ $fp = fopen(IP_FILE, 'w');
+ fclose($fp);
+}
+
+function fetchip()
+{
+ // Source: http://lists.phpbar.de/pipermail/php/Week-of-Mon-20040322/007749.html
+
+ $client_ip = (isset($_SERVER['HTTP_CLIENT_IP'])) ? $_SERVER['HTTP_CLIENT_IP'] : '';
+ $x_forwarded_for = (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : '';
+ $remote_addr = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '';
+
+ if (!empty($client_ip))
+ {
+ $ip_expl = explode('.',$client_ip);
+ $referer = explode('.',$remote_addr);
+ if($referer[0] != $ip_expl[0])
+ {
+ $ip=array_reverse($ip_expl);
+ $return=implode('.',$ip);
+ }
+ else
+ {
+ $return = $client_ip;
+ }
+ }
+ else if (!empty($x_forwarded_for))
+ {
+ if(strstr($x_forwarded_for,','))
+ {
+ $ip_expl = explode(',',$x_forwarded_for);
+ $return = end($ip_expl);
+ }
+ }
+ else
+ {
+ $return = $remote_addr;
+ }
+ unset ($client_ip, $x_forwarded_for, $remote_addr, $ip_expl);
+ return $return;
+}
+
+function isReloadLocked() {
+ $rem_addr = fetchip();
+ @$ip_array = file(IP_FILE);
+ $reload_dat = fopen(IP_FILE, 'w');
+ $this_time = time();
+ $found = false;
+ for ($i=0; $i<count($ip_array); $i++) {
+ list($ip_addr, $time_stamp) = explode('|', $ip_array[$i]);
+ if ($this_time < ($time_stamp + 60*RELOAD_MINUTES)) {
+ if ($ip_addr == $rem_addr) {
+ $found = true;
+ } else {
+ fwrite($reload_dat, "$ip_addr|$time_stamp");
+ }
+ }
+ }
+ fwrite($reload_dat, "$rem_addr|$this_time\n");
+ fclose($reload_dat);
+ return $found;
+}
+
+/////////////////////////////////////////
+// Counter-Abfrage
+/////////////////////////////////////////
+
+function getCounter() {
+ if ((!RELOADSPERRE_AKTIV) || (RELOADSPERRE_AKTIV && (!isReloadLocked()))) {
+ // Es ist ein neuer Besucher
+ $fp = fopen(COUNTER_FILE, 'r+');
+ $zahl = fgets($fp, STELLEN);
+ $zahl++;
+ rewind($fp);
+ flock($fp,2);
+ fputs($fp, $zahl, STELLEN);
+ flock($fp,3);
+ fclose($fp);
+ } else {
+ // Es handelt sich wahrscheinlich um den gleichen Besucher
+ $fp = fopen(COUNTER_FILE, 'r');
+ $zahl = fgets($fp,STELLEN);
+ fclose($fp);
+ }
+
+ $zahl = sprintf("%0".STELLEN."d", $zahl);
+
+ return $zahl;
+}
+
+$counter = getCounter();
+
+// No caching
+header("HTTP/1.1 200 OK");
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+header("Cache-Control: no-store, no-cache, must-revalidate");
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");
+
+if ($MODE == 'blind') {
+ header('Content-Type: image/png');
+
+ readfile(SPACER);
+} else if ($MODE == 'text') {
+ header('Content-Type: text/plain');
+
+ echo number_format ($counter, 0, ',', '.');
+} else {
+ header('Content-Type: image/png');
+
+ $im = ImageCreateFromPNG (BG_IMG);
+ imagesavealpha($im, true);
+
+ $offset_x = DIGITS_X_OFFSET;
+ $offset_y = DIGITS_Y_OFFSET;
+
+ for ($i=0; $i<strlen($counter); $i++) {
+ $digit_im = ImageCreateFromPNG(DIGIT_PREFIX.$counter[$i].DIGIT_SUFFIX);
+ $digit_w = imagesx($digit_im);
+ $digit_h = imagesy($digit_im);
+
+ ImageCopy($im, $digit_im, $offset_x, $offset_y, 0, 0, $digit_w, $digit_h);
+ ImageDestroy($digit_im);
+
+ $offset_x += $digit_w + DIGITS_SPACER;
+ }
+
+ imagepng($im);
+ imagedestroy($im);
+}
+
+?>
/trunk/web/spacer.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/bg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_0.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_1.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_2.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_3.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_4.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_5.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_6.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_7.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_8.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/digit_9.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/web/themes/sword/settings.inc.php
0,0 → 1,7
<?php
 
define('DIGITS_X_OFFSET', 60);
define('DIGITS_Y_OFFSET', 16);
define('DIGITS_SPACER', 4);
 
?>