phpbar.de logo

Mailinglisten-Archive

[php] PHP-Counter

[php] PHP-Counter

Florian Clever clever_(at)_aracnet.com
Sat, 8 Jan 2000 22:57:48 +0100


Ich habe vor kurzem einen Counter geschrieben, welcher für verschiedene
Themen verschiedene Zähler hat.
Also für die Seite1 und die Seite2 separate Zähler.
Wenn ein User auf Seite1 geht wird der Zähler von Seite hochgezählt, auf
Seite2 der von Seite2. Die Daten werden in einer einzigen Datei gespeichert.
Auf der PHP-seite die den Counter nutzen soll speichert man in der Variablen
$topic (es geht natürlich auch $topic=$PHP_SELF)einfach wie der Seitenname
lautet und ruft dann die Counter funktion auf. Diese zählt dann den Wert von
$topic hoch und falls $topic noch nicht existiert wird einer neuer Eintrag
hinzugefügt und auf 1 gesetzt.

function updatestatistics()
{
 // the file needs read/write permissions for all global $topic;
 if ( strlen($topic) == 0 )
 {
  return false;
 }
 $fp = fopen ("counter.fc","r");
 if ( !$fp )
 {
  return false;
 }
 if ( !flock($fp,1)) // acquire shared lock
 {
  return false;
 }
 $i = 0;
 $topicfound = false;
 while (! feof($fp) )
 {
  $line = chop(fgets($fp,40));
  $eqpos = strpos($line,"=");
  if ( $topic == substr($line,0,$eqpos) )
  {
   $num = (int) substr($line,$eqpos + 1) + 1;
   $lines[$i] = $topic . "=" . $num;
   $topicfound = true;
  } else {
   $lines[$i] = $line;
  }
  $i++;
 }
 if ( $topicfound == false )
 {
  // append topic
  $lines[$i] = $topic . "=" . 1;
 }
 flock($fp,3); // release read lock
 if ( ! fclose($fp) )
 {
  return false;
 }
 $fp = fopen("counter.fc","w+");
 if ( ! $fp )
 {
  return false;
 }
 if ( !flock($fp,1)) // acquire exclusive lock
 {
  return false;
 }
 while ( list ( $key,$value ) = each ($lines) )
 {
  if ( strlen($value) > 0 )
  {
   fwrite($fp,$value . "\n");
  }
 }
 flock($fp,3); // release exclusive lock
 fclose($fp);
}

Ich werde demnächst Email Reports hinzufügen, d.h. nach z.B. 1000 Zugriffen
wird eine Email an eine Emailadresse geschickt.

PS: Der Code ist nicht sehr ellegant.

Florian Clever
Phone.:  ++49 (0)761 7070268 / Fax.: ++49 (0)761 23565
Email: clever_(at)_aracnet.com / Internet: http://www.aracnet.com/~clever
Zasiusstr. 45 / D-79102 Freiburg / Germany



php::bar PHP Wiki   -   Listenarchive