SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

 
 
Themen-Optionen Ansicht
  #1  
Alt 15.04.2004, 08:16:16
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Besucherzähler setzt sich selbsständig zurück

Moin,

so schön mein neuer Besucherzähler auch ist, so unlogisch ist das Problem: Irgendwann wird aus noch ungeklärter Ursache die Statistik gelöscht und alles geht von vorn los.

Das Skript:
PHP-Code:
<?php 
// Funktion mit $counter=user_counter() aufrufen. 
// Nach Ablauf des Skriptes stehen dann folgende Variablen zur Verfuegung: 
// $counter['hits_today']           Hits am heutigen Tag 
// $counter['hits_yesterday']       Hits vom Vortag 
// $counter['visits_today']         Besucher am heutigen Tag 
// $counter['visits_yesterday']     Besucher vom Vortag 
// $counter['hits_total']           Gesamthits 
// $counter['visits_total']         Gesamtbesucherzahl 
// $counter['user_online']          Zahl der User, die online sind 
// $counter['max_online'][0]        Maximale Zahl gleichzeitiger Besucher 
// $counter['max_online'][1]        ...zu diesem Zeitpunkt. Fuer Formatierung siehe [url]http://php.net/date[/url] 

function user_counter() { 
    
// Pfad zur Datei, in der alles gespeichert werden soll 
    
$datafile='./counter_db.php'

    
// Zeit in Sekunden, die ein Besucher als online gelten soll 
    
$time_user_online=300

    
// Zeit in Sekunden, die ein Besucher nicht als neuer Besucher gezaehlt werden soll 
    
$time_visits=1800


    
// Zeitstempel speichern 
    
$timestamp=date('Ymd'); 
    
$timestamp_yesterday=date('Ymd'time()-86400); 

    
// Falls 'Datenbank' noch nicht existiert, dann mit Standardwerten erstellen 
    // -->>  Nach erstem Durchlauf auskommentieren!  <<-- 
    //       /* vor if und 
    //       */ hinter } (geschweifte Klammer) 
    
if (!file_exists($datafile)) { 
        
$fh=fopen($datafile'w'); 
            
$content=''
            
$content.="<?phpn"
            
$content.="$ips[]=array(0, 0, 0);n"
            
$content.="$counter['hits_total']=0;n"
            
$content.="$counter['visits_total']=0;n"
            
$content.="$counter['max_online']=array(0, 0);n"
            
$content.="?>"
            
fwrite($fh$content); 
        
fclose($fh); 
    } 

    
// Diese Datei einbinden 
    
include($datafile); 

    
// Hits erhoehen - heutige und gesamt 
    
if (!isset($hits[$timestamp])) { 
        
$hits[$timestamp]=1
    } 
    else { 
        
$hits[$timestamp]++; 
    } 
    
$counter['hits_total']++; 

    
// Visits setzen, wenn nicht vorhanden 
    
if (!isset($visits[$timestamp])) { 
        
$visits[$timestamp]=0
    } 

    
// Zaehler fuer aktive Nutzer auf Seite 
    
$user_online=0

    
// IPs aussortieren und aktualisieren 
    
$found_ip_v=$found_ip_o=0
    for (
$i=0$i<count($ips); $i++) { 
        
// Alte IPs entfernen 
        // v - Visits, o - Online 
        
if ($ips[$i][2]=='v' && time()-$time_visits>$ips[$i][1]) { 
            
$ips[$i]=0
            continue; 
        } 
        elseif (
$ips[$i][2]=='o' && time()-$time_user_online>$ips[$i][1]) { 
            
$ips[$i]=0
            continue; 
        } 

        
// Zeiten der aktuellen IP neu setzen 
        
if ($ips[$i][0]==$_SERVER['REMOTE_ADDR'] && $ips[$i][2]=='v') { 
            
$ips[$i][1]=time(); 
            
$found_ip_v=1
        } 
        
// Zeiten der aktuellen IP neu setzen 
        
elseif ($ips[$i][0]==$_SERVER['REMOTE_ADDR'] && $ips[$i][2]=='o') { 
            
$ips[$i][1]=time(); 
            
$found_ip_o=1
        } 

        if (
$ips[$i][2]=='o') { 
            
// Zaehler fuer aktive Nutzer auf Seite erhoehen 
            
$user_online++; 
        } 
    } 

    
// IP hinzufuegen, wenn noch nicht in Liste 
    
if ($found_ip_v==0) { 
        
// Visits erhoehen 
        
$visits[$timestamp]++; 
        
$counter['visits_total']++; 
        
// Zaehler fuer aktive Nutzer auf Seite erhoehen 
        
$user_online++; 

        
// IP hinzufuegen 
        
$ips[]=array($_SERVER['REMOTE_ADDR'], time(), 'v'); 
        
$ips[]=array($_SERVER['REMOTE_ADDR'], time(), 'o'); 
    } 
    elseif (
$found_ip_o==0) { 
        
// Zaehler fuer aktive Nutzer auf Seite erhoehen 
        
$user_online++; 

        
// IP hinzufuegen 
        
$ips[]=array($_SERVER['REMOTE_ADDR'], time(), 'o'); 
    } 

    if (
$user_online>$counter['max_online'][0]) { 
        
$counter['max_online']=array($user_onlinetime()); 
    } 

    
// Daten fuer neue 'Datenbank' sammeln 
    
$content=''
    
$content.="<?phpn"
    foreach (
$hits as $k => $v) { 
        
$content.="$hits['$k'] = $v;n"
    } 
    foreach (
$visits as $k => $v) { 
        
$content.="$visits['$k'] = $v;n"
    } 
    
$content.="$counter['hits_today'] = {$hits[$timestamp]};n"
    
$content.="$counter['hits_yesterday'] = ".(isset($hits[$timestamp_yesterday]) ? $hits[$timestamp_yesterday] : 0).";n"
    
$content.="$counter['visits_today'] = {$visits[$timestamp]};n"
    
$content.="$counter['visits_yesterday'] = ".(isset($visits[$timestamp_yesterday]) ? $visits[$timestamp_yesterday] : 0).";n"
    
$content.="$counter['hits_total'] = {$counter['hits_total']};n"
    
$content.="$counter['visits_total'] = {$counter['visits_total']};n"
    
$content.="$counter['user_online'] = $user_online;n"
    
$content.="$counter['max_online'] = array({$counter['max_online'][0]}, {$counter['max_online'][1]});n"
    foreach (
$ips as $k => $v) { 
        if (
$v!=0) { 
            
$content.="$ips[] = array('$v[0]', $v[1], '$v[2]');n"
        } 
    } 
    
$content.="?>"

    
// 'Datenbank' speichern 
    
$fh=fopen($datafile'w'); 
    if (
flock($fhLOCK_EX)) { 
        
fwrite($fh$content); 
       
flock($fhLOCK_UN); 
    } 
    
fclose($fh); 

    
// Datei erneut einbinden, damit aktualisierte Werte uebergeben werden koennen 
    
include($datafile); 

    return 
$counter

?>
Auch zu finden unter http://dbCF.de/t-besucherzaehler/

Das Problem trat gestern nicht zum ersten Mal auf. Aber zum ersten Mal mit der Nutzung von flock() Vorher ist es auch schon ohne passiert.

Ich lasse mir jetzt immer eine Mail schicken, wenn die Gesamtzahl aller Besucher kleiner fünf ist. In der Hoffnung, dass ich rausfinde, bei welcher Seite das passiert ist. Bisher hat mir der Inhalt noch nicht geholfen.

Wie gesagt: Ich weiß nicht warum es passiert.
Könnte es an der Zahl (bis zu 20) gleichzeitiger Zugriffe liegen? Aber PHP sorgt doch eigentlich dafür, dass dann alles der Reihe nach abläuft, nicht oder?
Externe Variablen dürften auch kein Problem sein, ist es doch schließlich eine Funktion, die sich nur um ihr eigenes Zeug kümmert.
Hinweis: An dem
PHP-Code:
if (!file_exists($datafile)) 
wie im Skript zu sehen, liegt es nicht, das ist bei mir auskommentiert.

Ich weiß, dass das Skript auch von anderen genutzt wird - dafür ist es ja da. Ich habe allerdings noch keine Beschwerden zu dem Thema erhalten. Entweder sind die bloß zu faul oder es liegt an meinen anderen Skripten.

So, das war's erst einmal, was mir so einfällt. Würde mich freuen, wenn ihr mir helfen könnt.


Bye
Carsten
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:31:45 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt