count(); // 4. Gib die Counterzahl aus: // echo( $MeinCounter->show() ); // Du kannst bis zu 3 Argumenten beim Erstellen des Counters angeben // 1. Einen Namen, der wird dann als erser Teil des Dateinamens verwendet (default ist "counter"). // 2. Eine Erweiterung für die Datei (ohne den Punkt) (default ist basiator_counter). // 3. Einen Pfad (defaultmäßig wird in dem aktuellen Verzeichnis gespeichert). // z.B. $MeinCounter = new Basiator_Counter( 'startseite', 'txt', 'admin/counterverzeichnis/' ); // So kannst Du auch auf einer Seite ganz viele Counter für verschiedene Dinge verwenden. // Und da das Hochzaehlen und das zurueckgeben des Counters getrennt ist kann man ihn // sich auch nur anzeigen lassen, oder nur zaehlen lassen. // Besonders ist der Schutz vor dem versehendlichen Zuruecksetzen des // Counters durch Zugriffsprobleme auf die Datei, wenn das Skript // mehrmals gleichzeitig laeuft (z.B. wenn zwei Besucher zeitgleich kommen)! // Erstellt durch Arne Sieglin 2002-10-06 // http://www.basiator.de // P.S.: Fuer einen Link zu meiner Seite waere ich dankbar! class Basiator_Counter { // Memberdeklaration var $mCounterstand; var $mDateiname; var $mAuslesenHatGeklappt; function Basiator_Counter( $Countername='counter', $DateiEndung='basiator_counter', $Pfad='' ) { // Member definieren $this->mCounterstand = 0; $this->mDateiname = ''; $this->mAuslesenHatGeklappt = FALSE; // Dateinamen zusammensetzten if ( $Pfad != '' ) { $this->mDateiname = $Pfad; } $this->mDateiname .= $Countername . '.' . $DateiEndung; // Counterstand auslesen, wenn sie exsistiert if ( file_exists( $this->mDateiname ) ) { $this->liesCounterstandAus(); } else // Datei anlegen { $Dateizeiger = @fopen( $this->mDateiname, 'w' ); @fputs( $Dateizeiger, '1' ); // Der Counter wird zu Anfang auf 1 gesetzt @fclose( $Dateizeiger ); $this->mCounterstand = 1; $this->$mAuslesenHatGeklappt = TRUE; } } function liesCounterstandAus() { $i = 0; $Dateizeiger = NULL; do { $i++; $Dateizeiger = @fopen( $this->mDateiname, 'r' ); $this->mCounterstand = @fgets( $Dateizeiger, 1024 ); @fclose( $Dateizeiger ); if ( $Dateizeiger && $this->mCounterstand ) { $this->mAuslesenHatGeklappt = TRUE; } } while ( ! $Dateizeiger && $this->mCounterstand && $i <= 5 ); // bis es einen Dateizeiger gibt, oder (und) einen Wert im Counterstand, oder (und) 5 Versuche durch sind return $this->mAuslesenHatGeklappt ; } function speichereNeuenWert() { $Dateizeiger = NULL; if ( $this->mAuslesenHatGeklappt ) { $this->mAuslesenHatGeklappt = FALSE; $i = 0; do { $i++; $Dateizeiger = @fopen( $this->mDateiname, 'w' ); @fputs( $Dateizeiger, $this->mCounterstand ); @fclose( $Dateizeiger ); } while ( ! $Dateizeiger && $i <= 5 ); // bis es einen Dateizeiger gibt, oder (und) 5 Versuche durch sind } return $Dateizeiger ? TRUE : FALSE; } function count() // zaehlt hoch und ruft speichereNeuenWert() auf { $this->mCounterstand++; return $this->speichereNeuenWert(); } function show() // gibt den aktuellen Counterstand (der Datei) zurück { $this->liesCounterstandAus(); return $this->mCounterstand; } } // zu class Basiator_Counter ?>