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 ::

Das Zend Framework

Das Zend Framework 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

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 26.02.2003, 14:17:11
Stoevi Stoevi ist offline
Anfänger
 
Registriert seit: May 2002
Beiträge: 42
Counter-Probleme

Hallo,

habe folgendes Skript für einen PHP Counter (welches eigentlich wunderbar funktioniert):

<?php
$counterfile = "counter.txt";
$zaehler = 1;

if (!file_exists($counterfile)) {
$hdl = fopen($counterfile, "w");
fputs($hdl, $zaehler. ":" . $REMOTE_ADDR);
fclose($hdl);
}
else {
$hdl = fopen($counterfile, "r");
$zeile = fgets ($hdl, 1024);
fclose($hdl);
$zeile = explode (":", $zeile);
$zaehler = $zeile [0];
$old_ip = $zeile[1];


if ($old_ip != $REMOTE_ADDR) {
$zaehler++;
$hdl = fopen ($counterfile, "w");
fputs ($hdl, $zaehler. ":" . $REMOTE_ADDR);
fclose ($hdl);
}

}
echo str_pad ($zaehler, 6, "0", STR_PAD_LEFT);
?>

Jetzt ist es mir aber schon ein paar mal passiert, dass der Counter plötzlich wieder auf "0" zurückgefallen ist... Weiß jemand, wo da das Problem liegen könnte???
Mit Zitat antworten
  #2  
Alt 26.02.2003, 14:27:59
Ben20
Guest
 
Beiträge: n/a
Ich hatte das gleiche Problem bei meinem eigenen Counter. Es liegt wohl daran, dass sich die Datei nicht zum Lesen öffnen läßt (weil sie evtl. von einem anderen Aufruf der Counterdatei blockiert wird), aber danach schreiben kann. Da das Script den Inhalt nicht lesen konnte und somit $zaehler auf "" oder auch 0 stand. Das wird dann wieder gespeichert!

Lösen kannst Du das Problem indem Du prüfst, ob sich die Datei lesen ließ, bzw. allgemein ein paar Sicherheitsabfragen (if $zahler != 0 z.b) einbaust.
Mit Zitat antworten
  #3  
Alt 26.02.2003, 14:33:19
Stoevi Stoevi ist offline
Anfänger
 
Registriert seit: May 2002
Beiträge: 42
Zitat:
Lösen kannst Du das Problem indem Du prüfst, ob sich die Datei lesen ließ, bzw. allgemein ein paar Sicherheitsabfragen (if $zahler != 0 z.b) einbaust.

bin in solchen Dingen leider ziemlich schlecht... kannst Du mir da evtl. mal weiterhelfen? ;-)
Mit Zitat antworten
  #4  
Alt 26.02.2003, 14:35:58
Ben20
Guest
 
Beiträge: n/a
Nach dem Teil:

$zaehler = $zeile [0];

kannst Du das einbauen:

if($zaehler != 0) {

$old_ip = $zeile[1];
if ($old_ip != $REMOTE_ADDR) {
$zaehler++;
$hdl = fopen ($counterfile, "w");
fputs ($hdl, $zaehler. ":" . $REMOTE_ADDR);
fclose ($hdl);
}

echo ...

}

....

Dann verhinderst Du, dass ein Counterstand von 0 in die Datei geschrieben wird!
Mit Zitat antworten
  #5  
Alt 26.02.2003, 14:41:14
Stoevi Stoevi ist offline
Anfänger
 
Registriert seit: May 2002
Beiträge: 42
DANKE!!!!!!!!!!!!!!!!!
Wird dann auf diesem Weg auf jeden Fall auch ein neuer Zähler-Wert angezeigt oder gibt's dann evtl. 'ne Fehlermeldung, wenn es "0" wäre
Mit Zitat antworten
  #6  
Alt 26.02.2003, 14:50:33
Ben20
Guest
 
Beiträge: n/a
Du kannst ja in den Else Zweig der If($zaehler != 0) Anweisung noch ein

echo "Mist - Counter geht gerade nicht!";


oder sowas in der Art einbauen!
Mit Zitat antworten
  #7  
Alt 26.02.2003, 18:20:43
Stoevi Stoevi ist offline
Anfänger
 
Registriert seit: May 2002
Beiträge: 42
Hallo nochmal...

möchte nur ungern was "kaputt machen", deshalb hier jetzt noch mal zur Kontrolle das Skript in der veränderten Form:

<?php

$counterfile = "counter.txt";
$zaehler = 1;

if (!file_exists($counterfile))

{
$hdl = fopen($counterfile, "w");
fputs($hdl, $zaehler. ":" . $REMOTE_ADDR);
fclose($hdl);
}


else {
$hdl = fopen($counterfile, "r");
$zeile = fgets ($hdl, 1024);
fclose($hdl);

$zeile = explode (":", $zeile);
$zaehler = $zeile [0];

if ($zaehler != 0)

{
$old_ip = $zeile[1];

if ($old_ip != $REMOTE_ADDR)

{
$zaehler++;
$hdl = fopen ($counterfile, "w");
fputs ($hdl, $zaehler. ":" . $REMOTE_ADDR);
fclose ($hdl);
}

echo str_pad ($zaehler, 6, "0", STR_PAD_LEFT);
}

?>

Wäre das so richtig?! Und was passiert, wenn ich KEIN echo "Mist..." ausgeben möchte? Bliebe der Zähler dann auf dem alten Stand? Und wenn ja, für wie lange?! Bis zum nächsten Seiten-Besucher?
Mit Zitat antworten
  #8  
Alt 27.02.2003, 00:49:04
Ben20
Guest
 
Beiträge: n/a
Ich sehe soweit keinen Fehler. Wenn Du kein echo machst wird halt nix ausgegeben und der Zählerstand nicht verändert. Solange bis der nächste die Seite aufruft! Sprich Dir geht 1 Besucher "verloren"
Mit Zitat antworten
  #9  
Alt 02.03.2003, 13:44:58
FriFra FriFra ist offline
Anfänger
 
Registriert seit: Mar 2003
Beiträge: 7
Die Sache hat nur einen Haken...

Wenn 2 oder mehr User gleichzeitig auf der Site sind, schaukelt sich der Zähler langsam hoch, da das Script immer abwechselnd mit unterschiedlichen IP's aufgerufen wird! Das kannst Du leicht prüfen, indem Du deinen Zähler einmal direkt und einmal z.B. über den Translator von Altavista aufrufst...
Mit Zitat antworten
  #10  
Alt 02.03.2003, 15:33:18
Ben20
Guest
 
Beiträge: n/a
Das stimmt. Wenn du die IP Adresse in einer anderen Datei speicherst zusammen mit einem Timestamp wann sie das letzte Mal da war kannst Du das Problem aber umgehen. Wenn es länger als ne halbe Stunde her ist erhöhst Du denn Counter, wenn nicht eben nicht. Das Script bräuchte dann aber noch eine Routine, die alte Einträge aus der zweiten Datei löscht!

Geändert von Ben20 (02.03.2003 um 15:35:50 Uhr)
Mit Zitat antworten
Antwort


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 04:35:57 Uhr.


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


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