[3.3] Eigenen Counter erstellen und einbinden.

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von IMC »

Hier mein Vorschlag.
Ersetze in der /dmzx/counter/event/listener.php
dies

Code: Alles auswählen

'UNIQUE_VISITS_COUNTER'				=> $this->user->lang('UNIQUE_VISITS_COUNTER', $counter),
'UNIQUE_VISITS_COUNTER_HOUR'			=> $this->user->lang('UNIQUE_VISITS_COUNTER_HOUR', $this->config['visits_counter_gc'] / 3600),
durch

Code: Alles auswählen

'UNIQUE_VISITS_COUNTER'				=> $this->user->lang('UNIQUE_VISITS_COUNTER', $counter, $this->config['visits_counter']),
'UNIQUE_VISITS_COUNTER_HOUR'			=> $this->user->lang('UNIQUE_VISITS_COUNTER_HOUR', $this->config['visits_counter_gc'] / 3600, $this->config['visits_counter']),
und in der /dmzx/counter/language/en/common.php
dies

Code: Alles auswählen

1 => 'last hour',
2 => 'last <strong>%d</strong> hours',
durch

Code: Alles auswählen

1 => 'last hour <strong>%d</strong> total',
2 => 'last <strong>%d</strong> hours <strong>%d</strong> total',
Anschließend den Cache leeren
Die Ausgabe sieht dann so aus.
[ externes Bild ]
Das Zeit Intervall ist die Reloadsperre.
Gruß, Thorsten
MDuss
Mitglied
Beiträge: 267
Registriert: 06.02.2008 10:21

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von MDuss »

Vielen Dank für eure Vorschläge. Ich werde mir das ganze dann am Wochenende genau anschauen.

MfG
MDuss
MDuss
Mitglied
Beiträge: 267
Registriert: 06.02.2008 10:21

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von MDuss »

Hi.

Ich habe jetzt mal beide Varianten von IMC und chris1278 getestet.

Beide Funktionieren soweit, aber beide haben dennoch ein Problem.

Der Gesamtzähler scheint wohl die Einträge der Tabelle visits_counter zu zählen. Was aber dann nicht mehr richtig funktioniert, wenn der selbe User nach Ablauf der Reloadsperre wieder kommt.

Ich versuche es mal etwas besser zu umschreiben.

Wenn ein user auf die Webseite kommt, dann wird seine IP in die Tabelle visits_counter eingetragen zusammen mit seinem Timestamp und der Zähler wird um 1 erhöht.
Es müsste noch eine separate zählervariable geben.
Wenn der User dann innerhalb der Reloadsperre (als Beispiel 1 Stunde) nochmals kommt, dann passiert gar nichts.
Wenn der User nach Ablauf der 1 Stunde kommt, dann wird der Zähler um 1 erhöht, und der User wird wieder in die Tabelle visits_counter eingetragen bzw. der Timestamp wird aktualisiert, sofern der User noch vorhanden ist.

Der Cronjob könnte bleiben, und nach Ablauf der Reloadsperre alle User aus der Tabelle visits_counter löschen, sofern diese länger als die Reloadsperre nicht mehr da waren.

Das ganze hätte dann folgenden Ablauf. Es gibt einen einfachen Gesamtzähler, der einfach nur nach oben zählt, wie viele Besucher es gab.

Wenn ein user kommt, würde also erst einmal nachgesehen, ob er schon mal da war innerhalb der Reloadsperre. Wenn dem nicht so ist, wird er eingetragen zusammen mit dem Timestamp. Daneben wird der Gesamtzähler um 1 erhöht.
Wenn der User jetzt innerhalb der Reloadsperre auftauchen würde, dann würde einfach nichts geschehen, weil er ja schon einmal gezählt wurde, und er da er ja noch in der Tabelle steht.

Wenn er nach Ablauf der Reloadsperre auftaucht, dann würde der Zähler wieder um eins erhöht, und sein Timestamp wird aktualisiert, bzw. er wird wieder neu in die Tabelle eingetragen wenn er nicht mehr in der Tabelle aufgelistet ist.

Der Cronjob wiederum würde beim auslösen einfach alle Einträger der Tabelle visits_counter löschen, die älter als die Reloadsperre sind, um ein aufblähen der Tabelle zu vermeiden. Der Gesamtzähler würde hierbei aber nicht angetastet.

Der Gesamtzähler wird also nur um eins erhöht, wenn ein user das erste mal auftaucht bzw. wenn er nach dem Ablauf der Reloadsperre wieder auftaucht und sein Eintrag gegebenen falls noch da sind, und sein Timestamp dann aktualisiert wird,

Kann man das irgendwie realisieren? Ich kenne mich leider was die Syntax usw. angeht bzgl. SQL nicht wirklich aus.
Das ganze wären wahrscheinlich nur ein paar If Else abfragen in denen geprüft wird, ob der User schon mal da war, und ob die Reloadsperre schon abgelaufen ist. Man bräuchte nur noch einen zusätzlichen Zähler.

Diesen Zähler könnte man einfach realisieren, indem man in der Tabelle einen zusätzlichen Wert namens Counter einfügt. Dann legt man in der Tabelle einen Eintrag mit der IP 0.0.0.0 an, denn diese gibt es in der Realität ja nicht, und dort lässt man dann den Counter hochzählen, als gesamt Zähler. Und dafür wird dann im Wert für den Timestamp einfach nicht eingetragen.
Die Tabelle phpbb_visits_counter hätte also drei Felder:
(uvc_ip, uvc_timestamp, uvc_counter)

Der cronjob der dann alle Besucher löscht, dessen Timestamp größer als die Reloadsperre ist, löscht dann alle Einträge mit Ausnahme des Eintrages 1ten Eintrages bzw. mit der IP Adresse 0.0.0.0. Damit ist sichergestellt dass der Gesamtzähler nicht versehentlich durch den Cronjob gelöscht wird.

Das ganze würde dann in der Praxis so aussehen:
Beim starten der Extension würde die Tabelle folgenden Inhalt haben:
(0.0.0.0.,,0)

Wenn jetzt ein User kommt, dann würde die Tabelle wie folgt aussehen:
0.0.0.0,,1
43.112.45.19,Timestamp der users,,

Wenn jetzt ein weiterer User kommt, sähe das wie folgt aus:

0.0.0.0,,2
43.112.45.19,Timestamp der users,,
111.45.66.23,Timestamp der Users,,

Wenn Jetzt nach Ablauf der Reloadsperre der Cronjob z.B. ausgelöst wird, dann sähe die Tabelle z.B. wie folgt aus, wobei der erste User schon länger als die Reloadsperre nicht mehr da war.

0.0.0.0, Kein Timestamp,2
111.45.66.23,Timestamp der Users,,

Der Gesamtzähler ist nach wie vor 2, da es ja bisher zwei Besucher insgesamt gab.

Wenn jetzt ein Dritter Besucher kommt, dann sieht es wie folgt aus:

0.0.0.0, Kein Timestamp,3
111.45.66.23,Timestamp der Users,,
143.22.18.111,Timestam des Users,,

Ich hoffe ich konnte mich verständlich ausdrücken, ich bin manchmal etwas umständlich bzw. drücke mich manchmal etwas unklar aus.

Wie gesagt, man müsse die zusätzliche Zählervariable einbinden, und dann das ganze mit den Abfragen irgendwie einbauen, nur meine Kenntnisse bzgl. SQL und das einbinden in PHP sind hier leider am Ende. Das anlegen der Variablen würde noch gehen in SQL, aber der ganze Rest mit den IF Abfragen usw, wie man das in php und die ganze Übergabe und Syntax, das ist leider etwas zu hoch für mich.

Wäre wirklich nett, wenn sich jemand, der sich damit auskennt, da was machen könnte.

MfG
MDuss
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von IMC »

Schau dir den Code von der Extension noch mal genau an. Es gibt in ihr bereits einen Gesamtzähler visits_counter. Dieser erhöht sich immer um eins wenn ein neuer Eintrag in dem visits_counter_table erfolgt. In der Ausgabe sind die Anzahl der Einträge in dem visits_counter_table und der Gesamtzähler.

Du könntest natürlich noch Aktualisierung des Zeitstempel aus dem Code löschen. Dann wird etwas öfter gezählt.
In der listener.php wird der Zeitstempel aktualisiert wenn der Besucher innerhalb deiner Reloadsperre zurückkehrt.

Code: Alles auswählen

else
{
	$sql_ary = [
		'uvc_timestamp'	=> time()
	];
	$sql = 'UPDATE ' . $this->visits_counter_table . ' SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
		WHERE ' . $this->db->sql_in_set('uvc_ip', $this->user->ip);
	$this->db->sql_query($sql);
}
Gruß, Thorsten
MDuss
Mitglied
Beiträge: 267
Registriert: 06.02.2008 10:21

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von MDuss »

HI IMC.

Da muss ich mir das ganze nochmal genau ansehen.

Ich komme da noch nicht ganz raus dabei.

MfG
MDuss
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von IMC »

MDuss hat geschrieben: 27.11.2021 16:56
Es gibt in ihr bereits einen Gesamtzähler visits_counter. Dieser erhöht sich immer um eins wenn ein neuer Eintrag in dem visits_counter_table erfolgt.
Wo in der Datenbank finde ich denn diesen Zähler? Ich habe den nirgendwo gefunden. Diese Exzension legt nur eine Tabelle in der Datenbank an, und dort steht nicht der Gesamtzähler. Dann legt die Extension noch ein paar Einträge in der Tabelle config an, aber auch dort steht nichts von einem Gesamtzähler.
Das ist die Spalte visits_counter in der Tabelle phpbb_config.
Dieser wird auch in der von mir vorgeschlagenen Änderung ausgegeben.


Was du auch wissen solltest.
Wenn es schlecht läuft ist der Eintrag eines Besucher in der Tabelle die doppelte Zeit von der Reloadsperre drin. Das passiert wenn der Eintrag kurz nach dem Cronjob erfolgt.
Gruß, Thorsten
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von IMC »

IMC hat geschrieben: 23.11.2021 21:50

Code: Alles auswählen

durch
[code]
1 => 'last <strong>%d</strong> hour <strong>%d</strong> total',
2 => 'last <strong>%d</strong> hours <strong>%d</strong> total',
Da war noch ein Fehler. Ist jetzt berichtigt.
Zuletzt geändert von IMC am 28.11.2021 14:53, insgesamt 1-mal geändert.
Gruß, Thorsten
MDuss
Mitglied
Beiträge: 267
Registriert: 06.02.2008 10:21

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von MDuss »

HI IMC.

Also die Extension funktioniert irgendwie überhaupt nicht richtig.

Ich habe heute die Mod komplett neu gestartet und auch die Arbeitsdaten gelöscht.

Dann habe ich vom PC und vom Smartphone die Webseite aufgerufen.

Der Gesamtzähler war dann bei 2 und in der Datenbank war der Wert für die Spalte visits_counter bei 2.
In der Tabelle phpbb_visits_counter waren auch entsprechend 2 Einträge vorhanden.

Die Reloadsperre ist auf 1 Stunde eingestellt. Das ganze war um ca. 10:32 Uhr.

Jetzt um 14:00 habe ich zuerst in die Datenbank geschaut. Der Wert für die Spalte visits_counter steht nun bei 4. In der Tabelle hpbb_visits_counter ist jetzt aber nur noch 1 Eintrag. Da hat zwischenzeitlich noch jemand das Forum besucht.

ABER: Wenn ich das Testforum aufmache, dann wird mir in der Statistik nur 1 Besucher Angezeigt, nicht 4. Also wird hier der Wert der Spalte visits_counter aus der Tabelle config gar nicht ausgelesen, sondern es wird scheinbar in Wirklichkeit gezählt wie viele Einträge sind in der Tabelle phpbb_visits_counter vorhanden, und das Ergebnis wird dann als Wert für die Besuche genommen. Wenn also 200 User mein Forum besucht haben, es stehen aktuell aber nur 15 Einträge in dieser Tabelle, dann zeigt mir die Statistik nur 15 Gesamtbesucher an, anstatt der 200. Egal was als Wert in der Spalte visits_counter der Tabelle config steht, selbst wenn da die korrekten 200 Besucher stehen.

MfG
MDuss

[Edit:] Habe jetzt das Testforum wieder vom Ahndy aufgerufen. Jetzt stehen in der phpbb_visits_counter wieder 2 Einträge. Da eine ist mein PC, das andere mein Handy. Der Gesamtzähler ist wieder auf 2. In der Tabelle config steht aber in der Spalter visits_counter 5.
Also die Indizieren sprechen dafür, dass die Statistik tatsächlich die Einträge in der Tabelle phpbb_visits_counter ausliest und als Besucherwert nimmt, und die Spalte visits_counter der Tabelle config außer acht lässt, obwohl das der eigentlich korrekte Gesamtzähler darstellt. Also müsste man genau diese Spalte als Gesamtbesucher auslesen, und die Tabelle phpbb_visits_counter eigentlich nur als Referenz für die Reloadsperre verwenden.
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von IMC »

MDuss hat geschrieben: 28.11.2021 14:13 Die Reloadsperre ist auf 1 Stunde eingestellt. Das ganze war um ca. 10:32 Uhr.

Jetzt um 14:00 habe ich zuerst in die Datenbank geschaut. Der Wert für die Spalte visits_counter steht nun bei 4. In der Tabelle hpbb_visits_counter ist jetzt aber nur noch 1 Eintrag. Da hat zwischenzeitlich noch jemand das Forum besucht.
Da hatte ich einen Fehler den ich in dem Post davor erwähnte und die Fehlerbehebung dazu schrieb.
Zuletzt geändert von IMC am 28.11.2021 14:50, insgesamt 2-mal geändert.
Gruß, Thorsten
MDuss
Mitglied
Beiträge: 267
Registriert: 06.02.2008 10:21

Re: [3.3] Eigenen Counter erstellen und einbinden.

Beitrag von MDuss »

Also ich habe jetzt alles gemacht.

Ich habe in der Mod deine erwähnten Änderungen vom 23.11 gemacht.
Jetzt habe ich noch die Änderung vom 27.11. um 16:14 gemacht und die Änderung vom 27.11. um 22:23. eingefügt

Habe jetzt den Cache gelöscht, das Testforum neu aufgerufen, aber es ändert nichts am Gesamtzähler. Dieser Zeigt nach wie vor 2 anstatt der 5 an.
Habe den Cache einmal per FTP und einmal über ACP gelöscht.


MfG
MDuss
Antworten

Zurück zu „Coding & Technik“