Zum Inhalt springen

php - Zugriffe zählen


Empfohlene Beiträge

Sers,

möchte auf diversen Galerien einer Homepage die Zugriffe auf eben diese Galerien zählen. Hierzu habe ich in die entsprechende index.htm folgenden php Code eingefügt:

<?

if(file_exists(".\visitors.txt"))

{

$datei_handle=fopen(".\visitors.txt",r);

$inhalt=fread($datei_handle,filesize(".\visitors.txt"));

fclose($datei_handle);

$count=$inhalt[0]+1;

}

else

{

$count=1;

}

$datei_handle=fopen(".\visitors.txt",w);

fwrite($datei_handle,$count);

fclose($datei_handle);

?>

Das schien auch im Prinzp zu funktionieren, allerdings läuft von Zeit zu Zeit wohl irgendwas schief, so dass bei einem Nachgucken in der visitors.txt wieder wesentlich geringere Werte auftauchen, als beim letzten mal. zurücksetzen tut da aber sicher niemand was...

Jemand ne Idee, woran das liegen kann bzw. was ich besser machen kann? Danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

was ist wenn zwei die Datei gleichzeitig lesen und schreiben?

Client 1 öffnet die Datei und liest den Counter von 2.

Client 2 öffnet die Datei und liest den Counter von 2.

Client 1 schreibt den neuen Counter (3) in die Datei.

Client 2 schreibt den neuen Counter (3) in die Datei.

Jetzt stell dir das ganze mit mehreren Clients vor und die Datei wird ja zwischendurch immer wieder gesperrt wenn einer schreibt. Also hängt der eine oder andere Client bis er schreiben darf.

Mach es lieber über eine DB.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mach es lieber über eine DB.

Finde ich eherlich gesagt oversized... sollte eigentlich nur ne quick 'n dirty lösung sein, damit man mal eben gucken kann, wie viele leute auf die jeweilige galerie zugegriffen haben... deswegen auch kein schnickschnack wie ip-sperre usw...

will wirklich einfach nur ne datei öffnen, auslesen, wert um eins erhöhen und wert wieder in datei schreiben und zusätzlich noch datei anlegen, wenn datei nicht existiert. und so viel traffic is auf der seite (und schon garnicht in den galerien) nicht, dass da die datei öfter mal gleichzeitig geöffnet ist...

Link zu diesem Kommentar
Auf anderen Seiten teilen

so habs jetzt anders gelöst (muss dann allerdings die visitors.txt explizit mit nem anfangswert auf dem server liegen haben->wird nicht angelegt):

<?php


$datei= fopen("visitors.txt", "r");

$dateigroesse=filesize("visitors.txt");

$counter=fread($datei, $dateigroesse);

fclose($datei);

$counter++;


# print("Sie sind der ".$counter.". Besucher auf der Seite.");

$datei=fopen("visitors.txt","w");

$output=fwrite($datei, $counter);

fclose($datei);

?>	

Die Zählerausgabe hab ich mal pro forma reingepackt... die brauch ich selbst hier eigentlich nicht...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Finde ich eherlich gesagt oversized...

Der Zugriff auf die DB geht auf jeden Fall schneller und ist performanter als der Zugriff auf eine Textdatei.

sollte eigentlich nur ne quick 'n dirty lösung sein, damit man mal eben gucken kann, wie viele leute auf die jeweilige galerie zugegriffen haben... deswegen auch kein schnickschnack wie ip-sperre usw...


<?php
if (@mysql_connect("localhost", "testUser", "test"))
{
if (@mysql_select_db("test"))
{
mysql_query("UPDATE galCounter SET numer = number +1");
}
}
?>
[/php]

Link zu diesem Kommentar
Auf anderen Seiten teilen

alternativ, wenn's weiterhin ohne db bleiben soll, eine ausweichdatei, so ne art lock,

Also, vor öffnen der Datei counter.txt prüfen, ob z.B. isOpen.tmp existiert, wenn nicht erstellen und die datei counter.txt öffnen.

wenn nun weiter zugriffe erfolgen, und die isOpen.tmp existiert, wird eine neue datei angelegt "1.tmp", für einen besuch, der dazugerechnet werden soll, das aber ja nich so will wie soll...

vor dem schließen der counter.txt wird nun überprüft, ob 1.tmp existiert, wenn ja counter nochmal um 1 erhöhen, und prüfen ob noch ne 2.tmp existiert u.s.w.

So hab ich es gemacht, als unser Info-Lehrer mir Db's verboten hat, weil ich noch nich vorarbeiten soll... :floet:

Wiegesagt, viel unnötige arbeit, ich würd ne db bevorzugen, tuts aber, auch wenn nicht sehr performance-schonend...

Ich hoffe das war verständlich, paar biere mögen entschuldigt sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich würde sowas über trigger machen. triger wenn ein select statement auf einen bestimmten datensatz zugreift zählen. dann hat man nicht nur alle sachen gezählt sondern auch jeden einzelnen zugriff ...

geht das ?:D noch nie probiert, aber das wäre mein ansatz

edith: sorry geht wohl nicht, nur bei insert/update/delete

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...