Zum Inhalt springen.
Zum Seitenanfang springen.
Sie befinden sich genau hier: Home > Computer > Coding > PHP - Counter.

PHP - Counter:

Der Counter dieser Website ist hier an der linken Seite zu sehen. Es wird keine Datenbank eingesetzt. Der Counter besteht aus einer PHP-Datei, der counter.php. Diese Version aus 2010 setzt noch Cookies ein. Aktuell wird der Counter ohne Cookies auf der Seite betrieben. Er zählt jetzt nur noch die Gesamtzugriffe. Der Quelltext für die Version mit Cookies ist folgender:

<?

// Counter Version 1.1 vom 01.08.2010


// Einstellmöglichkeit ob bei dem Auftreten eines Fehlers eine Email gesendet werden soll.


$emailsenden = "On";


// Funktionen zu diesem PHP-File


function Counter_speichern($dateiname, $dateiinhalt, $wert) {

global $emailsenden;

if (isset($wert)) {

Schreiben($dateiname, $dateiinhalt, $wert);

}

else {if ($emailsenden == "On") {mail ( 'counter@datenschwamm.de' , 'Counter ' . $dateiname . ' wurde 1x nicht gespeichert.' ,

'Der im Betreff genannte Counter konnte einen Eintrag nicht vornehmen.' , 'From:counter@datenschwamm.de');}}

}



function Fehlerbehandlung_Leere_Datei($dateiname, $dateiinhalt) {

global $emailsenden;

$backupdateiname = $dateiname ."backup";

$dateiinhalt = @fopen($dateiname,"r");

$wert = @fread ($dateiinhalt,filesize($dateiname));

fclose($dateiinhalt);

$dateiinhalt = @fopen($backupdateiname,"r");

$backupwert = @fread ($dateiinhalt,filesize($backupdateiname));

fclose($dateiinhalt);

if ($backupwert > $wert) {

$dateiinhalt = @fopen($dateiname, "w");

flock($dateiinhalt,2);

fwrite($dateiinhalt, $backupwert);

flock($dateiinhalt,3);

fclose($dateiinhalt);

}

if ($emailsenden == "On") {mail ( 'counter@datenschwamm.de' , 'Restore für den Counter ' . $dateiname . ' vorgenommen.' ,

'Der im Betreff genannte Counter ist ausgefallen und wurde auf das Backup zurückgesetzt. Der Wert ist '. $backupwert .'.' ,

'From:counter@datenschwamm.de');}


}

function Anlegen($dateiname, $dateiinhalt, $wert) {

global $emailsenden;

$dateiinhalt = fopen($dateiname, "w");

fputs($dateiinhalt,$wert);

fclose($dateiinhalt);

}

function Schreiben($dateiname, $dateiinhalt, $wert) {

global $emailsenden;

if ($wert >0) {

$dateiinhalt = @fopen($dateiname, "w");

flock($dateiinhalt,2);

fwrite($dateiinhalt, $wert);

flock($dateiinhalt,3);

fclose($dateiinhalt);

}

$backupdateiname = $dateiname ."backup";

if (!file_exists($backupdateiname)) {

Anlegen($backupdateiname, $dateiinhalt, "0");

}

$dateiinhalt = fopen($backupdateiname,"r");

$backupwert = @fread ($dateiinhalt,filesize($backupdateiname));

fclose($dateiinhalt);

if ($backupwert < $wert+1) {

$backupwert++;

$dateiinhalt = @fopen($backupdateiname, "w");

flock($dateiinhalt,2);

fwrite($dateiinhalt, $backupwert);

flock($dateiinhalt,3);

fclose($dateiinhalt);

}

}



// Zählt die Gesamtbesucher mit Cookie


if ($_SERVER['SCRIPT_NAME'] == "/index.php"){

$dateiname = "countalle.txt";

if (!file_exists($dateiname)) {

Anlegen($dateiname, $dateiinhalt, "1");

}

}

else {$dateiname = "../countalle.txt";}

$dateiinhalt = fopen($dateiname,"r");

$counter = @fread ($dateiinhalt,filesize($dateiname));

fclose($dateiinhalt);

$besucher = $_COOKIE['besucherds'];

if (!isset($besucher)) {

setcookie ("besucherds","ja");

$counter++;

Counter_speichern($dateiname, $dateiinhalt, $counter);

}


if (filesize($dateiname) <= 0) {

Fehlerbehandlung_Leere_Datei($dateiname, $dateiinhalt);

}


$datumcounterstart = mktime(11, 30, 0, 8, 1, 2010);

$divident = (time() - $datumcounterstart)/60/60/24;


$counterdurchschnitttgl = $counter / $divident;

$besucherheute = "counterbesucher_am_" . strftime("%d.%m.%Y", time());

if ($_SERVER['SCRIPT_NAME'] == "/index.php"){

$dateiname = "stats/$besucherheute.txt";}

else {$dateiname = "../stats/$besucherheute.txt";}


if (!file_exists($dateiname)) {

Anlegen($dateiname, $dateiinhalt, "0");

}


$dateiinhalt = @fopen($dateiname,"r");

$counterbesucherheute = @fread ($dateiinhalt,filesize($dateiname));

@fclose($dateiinhalt);

$besucher = $_COOKIE['besucherds'];

if (!isset($besucher)) {

$counterbesucherheute++;

Counter_speichern($dateiname, $dateiinhalt, $counterbesucherheute);

}

if (@filesize($dateiname) <= 0) {

Fehlerbehandlung_Leere_Datei($dateiname, $dateiinhalt);

}



// Zählt die Seitenaufrufe dieser Seite

$OffeneSeite = str_replace("/","",$_SERVER['SCRIPT_NAME'] );

$OffeneSeite = str_replace(".php","",$OffeneSeite );

$dateiname = "counter" . $OffeneSeite .".txt";


if (!file_exists($dateiname)) {

Anlegen($dateiname, $dateiinhalt, "0");

}

$dateiinhalt = fopen($dateiname,"r");

$counterseitenhier = @fread ($dateiinhalt,filesize($dateiname));

fclose($dateiinhalt);


$counterseitenhier++;

Counter_speichern($dateiname, $dateiinhalt, $counterseitenhier);

if (filesize($dateiname) <= 0) {

Fehlerbehandlung_Leere_Datei($dateiname, $dateiinhalt);

}


// Zählt die Seitenaufrufe insgesamt


if ($_SERVER['SCRIPT_NAME'] == "/index.php"){

$dateiname = "countseitenalle.txt";

if (!file_exists($dateiname)) {

Anlegen($dateiname, $dateiinhalt, "0");

}

}

else {$dateiname = "../countseitenalle.txt";

}


$dateiinhalt = fopen($dateiname,"r");

$counterseiten = @fread ($dateiinhalt,filesize($dateiname));

fclose($dateiinhalt);

$counterseiten++;


Counter_speichern($dateiname, $dateiinhalt, $counterseiten);

if (filesize($dateiname) <= 0) {

Fehlerbehandlung_Leere_Datei($dateiname, $dateiinhalt);

}

?>


Diese Datei wird von jeder Seite aus mit include ("../include/counter.php");
aufgerufen. Dort wo das Ergebnis des Counters angezeigt wird, passiert dies wie folgt:

<?php
echo '
Besucher<br />
…heute: '
,number_format($counterbesucherheute , 0, ',', '.'),'
<br />
…&#216; am Tag: '
,number_format($counterdurchschnitttgl , 0, ',', '.'),'
<br />
…insgesamt: '
,number_format($counter, 0, ',', '.'),'
<br /><br />
Seitenaufrufe<br />
…dieser Seite: '
, number_format($counterseitenhier, 0, ',', '.') ,'
<br />
…insgesamt: '
, number_format($counterseiten, 0, ',', '.'),'
<br /><br />
(Seit '
,strftime("%d.%m.%Y", $datumcounterstart),')
<br />
'
;
?>

Wenn eine Counter-Statistik wie diese gewünscht wird, muss dafür einfach eine neue Seite angelegt werden. Hier dann den PHP-Quelltext einfügen und entsprechend der Kommentare im Quelltext anpassen.

<?
function Einlesen($pfad) {
    global $ergebnis;
    $verzeichnis = opendir($pfad);
    while ($dateimanager = readdir($verzeichnis)) {
        $dateiname = $dateimanager;
        if (preg_match('(^count.)', $dateiname) && !preg_match('(.back.)', $dateiname) ) {
            if (file_exists($pfad.$dateiname)) {
            $dateiinhalt = fopen($pfad.$dateiname,"r");
            $counterseitenhier = @fread ($dateiinhalt,filesize($pfad.$dateiname));
            fclose($dateiinhalt);
            $dateiname = str_replace("counter","",$dateiname);
            $dateiname = str_replace(".txt","",$dateiname );    
            $ergebnis[substr($dateiname, 0, 60)] = $counterseitenhier;      
            }
        }
    }       
    closedir($verzeichnis);
}

function Ausgabe($Matrix) {
// Gibt ein Array als Tabelle aus
echo '<table style="width: 490px;" border="1">';
// print_r($ergebnis);
arsort($Matrix);
foreach ($Matrix as $key => $val) {
    echo "<tr><td style='width:30%;'>".$key."</td><td  style='width: 30%;'>".number_format($val, 0, ',', '.')."</td></tr>";
    }
echo "</table>";
}

/*  Hier einfach die Verzeichnisse angeben, die einen Counter enthalten.
    Diese Verzeichnisse könenn alle zusammen eingelesen werden und dann
    nach Besucheranzahl sortiert ausgegeben werden.
    Bei mehreren, getrennten Augaben das Array einfach nach der Ausgabe löschen.
*/

Einlesen("../");
Einlesen("../2/");
Einlesen("../3/");
Einlesen("../4/");
Einlesen("../5/");
Einlesen("../dateibrowser/");
Ausgabe($ergebnis);
echo "<br /><br />Besucher nach Tagen angezeigt:<br />";
unset($ergebnis);
Einlesen("../stats/");
Ausgabe($ergebnis);
?>