Seite 1 von 1

Animate Digits IP Tracking Counter 0.4.0 zählt nicht

Verfasst: 22.02.2008 22:12
von Helmut
Hallo,

ich habe bei mir den Animate Digits IP Tracking Counter 0.4.0 eingebaut, aber ich habe ihn bis jetzt nicht zum laufen gebracht. Die Konfiguration hat wunderbar geklappt, die Anzeige des Counters stimmt auch, im ACP lässt sich alles einstellen, nur er zählt nicht egal was ich im ACP einstelle. Weis jemand von euch, woran das liegen kann?

Gruß Helmut

Verfasst: 26.02.2008 10:35
von Helmut
Hallo,

nochmal nach oben schieb ...... :wink:

Ich bin bis jetzt noch nicht weiter gekommen bei der Frage, warum der Zähler nicht läuft. Hat denn keiner eine Idee?

Gruß Helmut :(

Verfasst: 06.03.2008 23:57
von Helmut
Hallo,

nochmal nach oben schieb ...... :oops:

Leider habe ich immer noch nicht die Ursache gefunden warum der Zähler nicht geht. :(

Vielleicht kann sich mal jemand den Zähler anschauen wo der Fehler liegen könnte?


[EDIT]
Hier ist die functions_counter.php welche die eigentliche Zählung vornehmen soll:

Code: Alles auswählen

class display_counter {

	var $config = array();

	function display_counter()
	{
		global $config, $phpbb_root_path;

		$this->config['counter_digits_path']		= $phpbb_root_path . $config['counter_digits_path'];
		$this->config['counter_digits_ani_path']	= $phpbb_root_path . $config['counter_digits_ani_path'];
		$this->config['counter_digits_number']		= $config['counter_digits_number'];
		$this->config['counter_digits_width']		= $config['counter_digits_width'];
		$this->config['counter_digits_height']		= $config['counter_digits_height'];
		$this->config['counter_block_ip']			= $config['counter_block_ip'];
		$this->config['counter_block_time']			= $config['counter_block_time'];
		$this->config['counter_ip_logfile']			= $phpbb_root_path . $config['counter_ip_logfile'];
	}

    function is_new_visitor()
	{
		$is_new = true;
		$rows = @file($this->config['counter_ip_logfile']);
		$this_time = time();
		$ip = getenv('REMOTE_ADDR');
		$reload_dat = fopen($this->config['counter_ip_logfile'], 'wb');

		flock($reload_dat, 2);

		for ($i = 0; $i < sizeof($rows); $i++)
		{
			list($time_stamp, $ip_addr) = split("\|", $rows[$i]);

			if ($this_time < ($time_stamp + $this->config['counter_block_time']))
			{
				if (chop($ip_addr) == $ip)
				{
					$is_new = false;
				}
				else
				{
					fwrite($reload_dat, "$time_stamp|$ip_addr");
				}
			}
		}

		fwrite($reload_dat, "$this_time|$ip\n");
		flock($reload_dat, 3);
		fclose($reload_dat);

		return $is_new;
	}

	function read_counter()
	{
		global $config, $phpbb_root_path;

		$update = false;

		$this->counter = $config['counter_hits'];

		if ($this->config['counter_block_ip'])
		{
			if ($this->is_new_visitor())
			{
				$this->counter++;
				$update = true;
			}
		}
		else
		{
			$this->counter++;
			$update = true;
		}

		if ($update)
		{
			set_config('counter_hits', $this->counter, true);
		}

		return $this->counter;
	}

	function create_output()
	{
		$this->read_counter();
		$this->counter = sprintf("%0" . "" . $this->config['counter_digits_number'] . "" . "d", $this->counter);

		$ani_digits = sprintf("%0" . "" . $this->config['counter_digits_number'] . "" . "d", $this->counter + 1);
		$html_output = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr align=\"center\">\n";

		for ($i=0; $i < strlen($this->counter); $i++)
		{
			if (substr("$this->counter", $i, 1) == substr("$ani_digits", $i, 1))
			{
				$digit_pos = substr("$this->counter", $i, 1);
				$html_output .= "<td class=\"counter\"><img src=\"" . $this->config['counter_digits_path'] . "/$digit_pos.gif\"";
			}
			else
			{
				$digit_pos = substr("$ani_digits", $i, 1);
				$html_output .= "<td class=\"counter\"><img src=\"" . $this->config['counter_digits_ani_path'] . "/$digit_pos.gif\"";
			}

			$html_output .= " width=\"" . $this->config['counter_digits_width']. "\" height=\"" . $this->config['counter_digits_height'] . "\" alt=\"\" /></td>\n";
		}

		$html_output .= "</tr></table>\n";

		return $html_output;
	}
}
Es funktioniert alles, nur die eigentliche Zählung geht nicht. Das Problem steckt vermutlich bei der Funktion function is_new_visitor(), bin mir aber nicht sicher.


Gruß Helmut

Verfasst: 08.03.2008 02:02
von ups
hmmm...

so wie ich das sehe hast du ein phpbb2 board und ein phpbb3 beta mod eingebaut....

das kann nicht funktionieren....

Verfasst: 08.03.2008 03:57
von 4seven
Hallo ups,

Helmut baut sich grad das 3er Board auf, von daher passt es schon :)

Hallo Helmut,

die möglichen Fehlerquellen sind da wohl ziemlich komplex.

Falls sich keine Lösung finden sollte, nimm den CHCounter.

Tausendfach bewährt und schon lange keine Beta mehr :wink:

Ab hier lesen

lg
4seven

Verfasst: 08.03.2008 12:43
von Helmut
Hallo 4seven,

die Fehlerquellen sind nicht so wild, so wie es aussieht, wird nur der Zählerstand nicht in der phpbb3_config aktuallisiert, die Ausgabe usw. geht ja Fehlerfrei. Der Zähler basiert auf dem Animated Counter 1.1, den du hier runterladen kannst. Hier ist die acounter.php:

Code: Alles auswählen

class acounter {

    var $config = array();

    function acounter () {

        /* URL to the digitset */
        $this->config['img'] = "http://localhost/~counters/acountphp/digits/";

        /* URL to the animated digitset */
        $this->config['animated_img'] = "http://localhost/~counters/acountphp/digits_ani/";

        /* How many digits to show */
        $this->config['pad'] = 6;

        /* digit width and height */
        $this->config['width']  = 16;
        $this->config['height'] = 22;

        /* ip blocking (true/false) */
        $this->config['block_ip'] = false;

        /* path to ip logfiles */
        $this->config['logfile'] = "./ip.txt";

        /* timeout (minutes) */
        $this->config['block_time'] = 15;
    }

    function is_new_visitor() {
        $is_new = true;
        $rows = @file($this->config['logfile']);
        $this_time = time();
        $ip = getenv("REMOTE_ADDR");
        $reload_dat = fopen($this->config['logfile'],"wb");
        flock($reload_dat, 2);
        for ($i=0; $i<sizeof($rows); $i++) {
            list($time_stamp,$ip_addr) = split("\|",$rows[$i]);
            if ($this_time < ($time_stamp+$this->config['block_time'])) {
                if (chop($ip_addr) == $ip) {
                    $is_new = false;
                } else {
                    fwrite($reload_dat,"$time_stamp|$ip_addr");
                }
            }
        }
        fwrite($reload_dat,"$this_time|$ip\n");
        flock($reload_dat, 3);
        fclose($reload_dat);
        return $is_new;
    }

    function read_counter_file($page) {
        $update = false;
        if (!file_exists("./pages/$page.txt")) {
            $count_dat = fopen("./pages/$page.txt","w+");
            $this->counter = 1;
            fwrite($count_dat,$this->counter);
            fclose($count_dat);
        } else {
            $fp = fopen("./pages/$page.txt", "r+");
            flock($fp, 2);
            $this->counter = fgets($fp, 4096);
            flock($fp, 3);
            fclose($fp);
            if ($this->config['block_ip']) {
                if ($this->is_new_visitor()) {
                    $this->counter++;
                    $update = true;
                }
            } else {
                $this->counter++;
                $update = true;
            }
            if ($update) {
                $fp = fopen("./pages/$page.txt", "r+");
                flock($fp, 2);
                rewind($fp);
                fwrite($fp, $this->counter);
                flock($fp, 3);
                fclose($fp);
            }
        }
        return $this->counter;
    }

    function create_output($page='') {
        if (empty($page)) {
            $page = "counter";
        }
        $this->read_counter_file($page);
        $this->counter = sprintf("%0"."".$this->config['pad'].""."d",$this->counter);
        $ani_digits = sprintf("%0"."".$this->config['pad'].""."d",$this->counter+1);
        $html_output = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr align=\"center\">\n";
        for ($i=0; $i<strlen($this->counter); $i++) {
            if (substr("$this->counter",$i,1) == substr("$ani_digits",$i,1)) {
                $digit_pos = substr("$this->counter",$i,1);
                $html_output .= "<td><img src=\"".$this->config['img']."$digit_pos.gif\"";
            } else {
                $digit_pos = substr("$ani_digits",$i,1);
                $html_output .= "<td><img src=\"".$this->config['animated_img']."$digit_pos.gif\"";
            }
            $html_output .= " width=\"".$this->config['width']."\" height=\"".$this->config['height']."\"></td>\n";
        }
        $html_output .= "</tr></table>\n";
        return $html_output;
    }

}
Dieser Code funktioniert, es werden die Besucher/Klicks gezählt. Der wesentliche Unterschied im Code liegt nur darin, dass hier der Zählerstand in eine Datei geschrieben wird, die Erfassung der Seitenaufrufe ist praktisch gleich.

Ich werde mir mal den CHCounter anschauen. Die meisten dieser Counter wollen eine externe Verbindung zu "ihrem" Server aufbauen, sowas gefällt mir nicht so gut, da es dann immer mal zu Problemen kommen kann, wenn der Zugriff lange dauert.

@ups
Stimmt, meine aktuelle Homepage basiert auf phpBB2, aber wie 4seven schon sagte, ich bin gerade dabei, die HP auf das neue Forum umzustellen. Daher ist die neue Seite auch noch nicht offiziell für jeden Zugänglich, obwohl die Test Homepage schon Online ist.

Gruß Helmut :wink:


P.S. 4seven, ich schicke dir mal ne PN, dann kannst dir die neue Seite mal anschauen.

Verfasst: 08.03.2008 13:48
von ups
Helmut hat geschrieben:@ups
Stimmt, meine aktuelle Homepage basiert auf phpBB2, aber wie 4seven schon sagte, ich bin gerade dabei, die HP auf das neue Forum umzustellen.
sorry, das wußte ich nicht...ich ging in der annahme..
nunja, irren ist menschlich :)

ups

Verfasst: 08.03.2008 18:31
von 4seven
Helmut hat geschrieben: Die meisten dieser Counter wollen eine externe Verbindung zu "ihrem" Server aufbauen, sowas gefällt mir nicht so gut, da es dann immer mal zu Problemen kommen kann, wenn der Zugriff lange dauert.
Tut der CHCounter garantiert nicht, da ich den Counter schon seit Jahren eingebaut und vollständig analysiert habe. Er läuft 100% local. Außerdem sind die (Weiter)Betreiber des Counters klasse drauf und Open-Source-Freunde, die "um der Sache Willen" das vom Original-Autor stillgelegte Project mit viel Einsatz weiterpflegen :wink:

Und, hab Dank für die Einladung :grin:

lg
4seven

Verfasst: 08.03.2008 22:13
von Helmut
Hallo 4seven,

ich habe mir den Counter ausgesucht, weil er sehr kompakt und überschaubar ist. Ich habe jetzt noch nicht weiter gesucht warum er nicht zählt, gibt eigentlich nur zwei Punkte die dafür verantwortlich sein können. Du kannst dir ja mal den Counter testweise einbauen und schauen ob er bei dir geht.

Den CHCounter habe ich nocht nicht getestet, werde ihn aber auch mal testweise einbauen.

Gruß Helmut :wink: