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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
26.02.2003, 14:17:11
|
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???
|
26.02.2003, 14:27:59
|
|
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.
|
26.02.2003, 14:33:19
|
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? ;-)
|
26.02.2003, 14:35:58
|
|
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!
|
26.02.2003, 14:41:14
|
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
|
26.02.2003, 14:50:33
|
|
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!
|
26.02.2003, 18:20:43
|
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?
|
27.02.2003, 00:49:04
|
|
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"
|
02.03.2003, 13:44:58
|
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...
|
02.03.2003, 15:33:18
|
|
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)
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:35:57 Uhr.
|