Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2003 Teil von Dezember

SELFHTML Forumsarchiv
counter der klicks auf ein bild zählt

Informationsseite
  1. Seite (PHP) counter der klicks auf ein bild zählt von Stefan, 30. 12. 2003, 20:56
nach unten

counter der klicks auf ein bild zählt

Die folgende Nachricht zum Thema stammt von: Stefan, 30. 12. 2003, 20:56

Ich brauche eure Hilfe. Auf meiner Website möchte ich einen Counter installieren der zählt wieviel mal auf ein bestimmtes Bild geklickt wird. Zudem sollte es ein Adminmenü geben auf der dann angezeigt wird, wieviel mal auf das Bild geklickt wurde.

nach obennach unten

counter der klicks auf ein bild zählt

Die folgende Nachricht zum Thema stammt von: Andreas Korthaus, 30. 12. 2003, 21:03

Hi!

»» Ich brauche eure Hilfe. Auf meiner Website möchte ich einen Counter installieren der zählt wieviel mal auf ein bestimmtes Bild geklickt wird. Zudem sollte es ein Adminmenü geben auf der dann angezeigt wird, wieviel mal auf das Bild geklickt wurde.

OK. Und was ist jetzt die Frage?


Grüße
Andreas

nach obennach unten

counter der klicks auf ein bild zählt

Die folgende Nachricht zum Thema stammt von: Magic Mike, 30. 12. 2003, 22:05

Zunächst mal Moin,

»» Ich brauche eure Hilfe. Auf meiner Website möchte ich einen Counter installieren der zählt wieviel mal auf ein bestimmtes Bild geklickt wird. Zudem sollte es ein Adminmenü geben auf der dann angezeigt wird, wieviel mal auf das Bild geklickt wurde.

Zieh Dir das:

[link:twins.sumsebienchen.de/counter.zip]

und dein link vom Bild muß dann so aussehen:

<a href="counter.php?http://www.deine_url.de/dein_bild.jpg"><img .....></a>

regds
Mike

nach obennach unten

counter der klicks auf ein bild zählt

Die folgende Nachricht zum Thema stammt von: Jonathan Zeller, 31. 12. 2003, 13:50

Hallo,

»» [link:twins.sumsebienchen.de/counter.zip]
Bei Links hier im Forum musst du auch das Protokoll angeben. In diesem Fall also HTTP.
Der richtige Link: http://twins.sumsebienchen.de/counter.zip

Jonathan

nach obennach unten

PHP: Generelles zum Thema File-Locking

Die folgende Nachricht zum Thema stammt von: Tom, 01. 01. 2004, 13:11

Hello,

»» Der richtige Link: http://twins.sumsebienchen.de/counter.zip

Ich möchte darauf hinweisen, dass die Locking-Strategie in diesem Script nicht greift:

flock($fp, 1);
fputs($fp, $file);
flock($fp, 3);
fclose($fp);

Es handelt sich bei diesen PHP-Funktionen um "advisory locking". Das bedeutet, dass in einer Tabelle ein Vermerk gesetzt wird, dass die Dateisperre nun bitte zu beachten ist. Die Beachtung der Dateisperre kann aber nur durch das Abfragen des Funktionsergebnisses von flock() wahrgenommen werden.

Die Funktion fputs() bekommt von ggf. tatsächlich angemeldeten Lock überhaupt nichts mit. Dazu müsste man mit "mandatory locks" ("HardLock") arbeiten.

Richtig wäre also:

for($lockcount = 0; $lockcount < 5; $lockcount++)
{
  if (@flock($fp, 1))   ## Fehlermeldung muss hier ausgeschaltet werden
  {
    fputs($fp, $file);
    flock($fp, 3);
    break;
  }
  else
  {
    # Fehlerbehandlung
  }
}

fclose($fp);


Außerdem ist das Locken an dieser Stelle zu spät, wenn die datei nur geschreiben wird. Beim Locking muss man generell sicherstellen, dass zwischen dem letzten eigenen Lesevorgang und dem eigenen Schreibvorgang kein weiterer Schreibvorgang stattgefunden hat. Das kann man auf drei Arten erreichen:

1. Man lockt von vor dem Lesen bis nach dem Schreiben exclusiv
   Das nennt man dann "pessimistic locking strategie"
   Diese methode lässt sich am einfachsten umsetzen.
   Beispiel: http://bitworks.de/~selfHTML/speichern.php

2. Man fügt einen "Conflict Counter" hinzu, der bei jedem Schreibvorgang
   um eins hochgezählt wird. Geschrieben werden darf aber nur, wenn sich
   der Conflict Counter seit dem letzten Lesen nicht verändert hat.
   Das bedeutet aber, dass man innerhalb des Locks den Zähler nochmals
   lesen muss. Nur wenn er sich seit dem lezten Lesen vor Beginn der
   Datenmanipulation bis jetzt nicht geändert hat, darf er um eins er-
   höht werden, und es wird weggeschrieben.
   Das nennt man dann "optimistic locking strategie", dam nan eigentlich
   davon ausgeht, dass der Conflict-Handler i.d.R. nicht anspricht. Diese
   Methode erfordert zwar eien zusätzliche Leseoperation, ist aber in
   Bezug auf paralleles Lesen von Datenbeständen performanter.

3. Man nutzt die "academic locking strategie".
   Hier wird jeder Veränderungswunsch von Daten damit eingeleitet, dass
   versucht wird, einen exclusiv Lock zu setzen. Hat dieser Erfolg, wird
   sofort auf "shrared read lock" zurückgenommen. So kann jede andere
   Applikation (jeder andere User) die Daten noch lesen, aber er erfährt
   beim eigenen Wunsch, die Daten zu verändern, dass dies im Moment nicht
   möglich ist, da er keinen exclusiv lock setzen kann, solange ein shared
   read lock gestzt ist. Den darf er nun aber auch selber nicht mehr setzen,
   da er damit verhindern würde, dass der erste User nach Abschluss seiner
   Manipulation für den kurzen Moment des Schreibvorganges aus exclusive
   lock "hochschaltet".

   Dieses Verfahren funktioniert auch bestens mit mandatory locking und
   bietet dann die höchsate Datensicherheit.

Rein physisch ist eine Datei solange für andere Prozesse gesperrt, wie ein Prozess darauf zugreift. Da die Zugriffsdauern  sich aber im Millisekundenbereich bewegen, muss man schon einige Hundert Zugriffe pro Sekunde auslösen, um einen _physischen_ Konflikt herbeizuführen. Das hatte z.B. Sven Rautenberg in unserem Versuch mit dem Speichern-Script gemacht. Da ich die Datei nicht lesen konnte und den Grund des Nicht-Lesen-Könnens nicth abgefragt habe, (nur boolesch, keine Fehlernummer), hat meine Scriptinstanz die Daten neu initialisiert, da sie davon ausging, dass die Datei nicht vorhanden war. Wenn ich die Fehlernummer abgefragt hätte, wäre "Access denied" dabei herausgekommen, was etwas anderes ist als "File not found".

Soviel zum Arbeiten mit Locks und dem Sumsebienchen-Script.




Liebe Grüße aus http://www.braunschweig.de

Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen

nach obennach unten

Generelles zum Thema File-Locking, noch ein Fehler

Die folgende Nachricht zum Thema stammt von: Tom, 01. 01. 2004, 13:59

Hello,

»» Richtig wäre also:

verflixt nochmal, selbst die Locking-Methode hat im Sumsebienchen-Script  nicht gestimmt und ich hab's übersehen. Sorry.

»»
»» for($lockcount = 0; $lockcount < 5; $lockcount++)
»» {
    if (@flock($fp, 2))   ## exclusives Locking!
»»   {
»»     fputs($fp, $file);
»»     flock($fp, 3);
»»     break;
»»   }
»»   else
»»   {
»»     # Fehlerbehandlung
»»   }
»» }
»»
»» fclose($fp);

siehe http://de2.php.net/manual/de/function.flock.php



Liebe Grüße aus http://www.braunschweig.de

Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen

nach obennach unten

File-Locking, 3. "Entwicklungsstufe"

Die folgende Nachricht zum Thema stammt von: Tom, 04. 01. 2004, 23:12

Hello,

Chritians Einwand ist ebenfalls berechtigt. Also wäre _eine_ saubere
Lösung nun diese:

for($lockcount = 0; $lockcount < 5; $lockcount++)
{
  if (@flock($fp, 2))   ## exclusives Locking!
  {
    fputs($fp, $file);
    fflush($fp);
    flock($fp, 3);
    break;
  }
  else
  {
    usleep(8000);      #8ms warten. Funktioniert nicht bei WIN

    # Fehlerbehandlung nacxh Belieben
    # Wenn Fehlerzähler >= 4. ggf Exception generieren
  }
}

fclose($fp);



Festzustellen wäre noch, ob flock() nicht von sich aus auf der Systemebene mehrere Lockversuche durchführt. Beim guten alten DOS waren das defaultmäßig z.B. immer fünf Versuche in Seeehr kurzem Abstand. Außerdem sollte man für den Misserfolgszeit eine Delay-Time einbauen (usleep()).

siehe auch:
  http://de2.php.net/manual/de/function.flock.php
  http://de3.php.net/manual/en/function.fflush.php



Liebe Grüße aus http://www.braunschweig.de

Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen

nach obennach unten

PHP: Generelles zum Thema File-Locking

Die folgende Nachricht zum Thema stammt von: Christian Seiler, 04. 01. 2004, 12:09

Hallo Tom,

»»     fputs($fp, $file);
»»     flock($fp, 3);

Das halte ich für gefährlich. Es könnte nämlich sein, dass die Daten von fputs() noch in einem Puffer sind. Wenn Du nun das Lock entfernst, kann es dann doch zu Problemen kommen. Daher wäre es sinnvoll, die Datei an dieser Stelle einfach zu schließen (damit würde das Lock automatisch entfernt) oder zumindest vorher ein fflush() durchzuführen, damit auch alle Änderungen geschehen sind.

Viele Grüße,
Christian

nach obennach unten

counter der klicks auf ein bild zählt

Die folgende Nachricht zum Thema stammt von: Tom, 30. 12. 2003, 22:37

Hello,

»» Ich brauche eure Hilfe. Auf meiner Website möchte ich einen Counter installieren der zählt wieviel mal auf ein bestimmtes Bild geklickt wird.

Ich habe gerade die letzten Tage ein Musterscript für sowas fertig gemacht. Mit ein wenig PHP-Kenntnissen kann man das für seine Zwecke umbauen. Sven Rautenberg hat es dann in einer Crash-Test-Aktion zum Absturz gebracht und ich habs (hoffentlich) nun soweit, dass es alle notwendigen Elemente enthält. (Die Zähldateien müssen in der realen Anwendung später außerhalb der Doc-Root liegen oder mit .htaccess abgeschirmt werden)

http://bitworks.de/~selfHTML/speichern.php


Viel Erfolg


Liebe Grüße aus http://www.braunschweig.de

Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2003 Teil von Dezember

© 1998-2006 Seite Impressum, Software: Classic Forum