Hüsi Geschrieben 16. Juli 2007 Geschrieben 16. Juli 2007 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! Zitieren
robotto7831a Geschrieben 16. Juli 2007 Geschrieben 16. Juli 2007 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 Zitieren
Hüsi Geschrieben 16. Juli 2007 Autor Geschrieben 16. Juli 2007 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... Zitieren
Hüsi Geschrieben 16. Juli 2007 Autor Geschrieben 16. Juli 2007 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... Zitieren
geloescht_JesterDay Geschrieben 17. Juli 2007 Geschrieben 17. Juli 2007 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] Zitieren
kills Geschrieben 17. Juli 2007 Geschrieben 17. Juli 2007 Oder noch kürzer: <?php if (@mysql_connect("localhost", "testUser", "test")) { mysql_db_query("test", "UPDATE galCounter SET numer = number +1"); } ?>[/PHP] :-) Zitieren
Cadpax Geschrieben 18. Juli 2007 Geschrieben 18. Juli 2007 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. Zitieren
baba007 Geschrieben 18. Juli 2007 Geschrieben 18. Juli 2007 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 ? noch nie probiert, aber das wäre mein ansatz edith: sorry geht wohl nicht, nur bei insert/update/delete Zitieren
Empfohlene Beiträge
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.