php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.05.2007, 08:57  
Neuer Benutzer
 
Registriert seit: 15.05.2007
Beiträge: 5
Serena77
Standard Counter stellt sich unregelmäßig zurück

Hallo, ich habe mir vor Unzeiten mal ein Counter Script "pgcCounter" runtergeladen und verwendet, habe selber kaum bis gar keine Ahnung von PHP. Leider stellt sich dieser Counter in sehr unregelmäßigen Abständen wieder zurück auf Null (die Statistiken werden in Textfiles abgelegt), und ich habe keine Ahnung warum und wie ich das abstellen kann. Habe auch schon gegoogelt und bei anderen Countern ähnliche Probleme gelesen, aber nicht bei diesem - und das offizielle Support-Forum dazu scheint es nicht mehr zu geben. Kann mir da jemand weiterhelfen?

hier der Code der zugehörigen PHP-Datei:
Code:
<?
function gettemplate($template)
{
  return str_replace("\"","\\\"",implode("",file($template)));
}

function dooutput($template)
{
  echo $template;
}

//#####Useronline ausgeben#####

$i = 0;
$j = 0;

$filearray = file($counter_path . "stats/useronline.txt");
foreach($filearray as $num => $line)
{
  $ip_timestamp_array = split("( |-)",$line);
  $ip[$i] = $ip_timestamp_array[0];
  $timestamp[$j] = $ip_timestamp_array[1];

  $fivemins_ago = time() - 300;

  if($ip[$i] == $REMOTE_ADDR)
  {
    $search_toremove = $ip[$i] . "-" . $timestamp[$j];
    $insert = $REMOTE_ADDR . "-" . time() . "\n";
    $datei = fopen($counter_path . "stats/useronline.txt", "r");
    $size = filesize($counter_path . "stats/useronline.txt");
    $contents = fread($datei, $size);
    fclose($datei);
    $massreplace = preg_replace("/$search_toremove/", $insert, $contents);
    $datei = fopen($counter_path . "stats/useronline.txt", "w");
    fputs($datei, $massreplace);
    fclose($datei);
  }

  if($fivemins_ago > $timestamp[$j])
  {
    $search_toremove = $ip[$i] . "-" . $timestamp[$j];
    $datei = fopen($counter_path . "stats/useronline.txt", "r");
    $size = filesize($counter_path . "stats/useronline.txt");
    $contents = fread($datei, $size);
    fclose($datei);
    $massreplace = preg_replace("/$search_toremove/", "", $contents);
    $datei = fopen($counter_path . "stats/useronline.txt", "w");
    fputs($datei, $massreplace);
    fclose($datei);
  }

  $i++;
  $j++;
}

$to_test = implode("", @file($counter_path . "stats/useronline.txt"));

if (!strstr($to_test, $REMOTE_ADDR))
{
  $put_in_file = $REMOTE_ADDR . "-" . time();
  $datei = fopen($counter_path . "stats/useronline.txt", "a+");
  fputs($datei, $put_in_file . "\n");
  fclose($datei);
}

$filearray = file($counter_path . "stats/useronline.txt");
foreach($filearray as $num => $line)
{
  $count_useronline++;
}

$maxuseronline_file = fopen($counter_path . "stats/maxuseronline.txt", "r");
$maxuseronline = fgets($maxuseronline_file, 100);
fclose($maxuseronline_file);

if($count_useronline > $maxuseronline)
{
  $maxuseronline_file = fopen($counter_path . "stats/maxuseronline.txt", "w");
  fputs($maxuseronline_file, "$count_useronline");
  fclose($maxuseronline_file);
}

//#####Reset IP-List alle 24h immer 0 Uhr#####
$lastreset_file = fopen($counter_path . "stats/lastreset.txt", "r");
$lastreset = fgets($lastreset_file, 100);
fclose($lastreset_file);

$today_code = date("dm");
$lastreset_code = date("dm", $lastreset);
$get_today_day = date("j");
$get_today_month = date("n");
$get_today_year = date("Y");
$set_today_hour = 0;
$set_today_minute = 0;
$set_today_second = 0;

$new_reset_timestamp = mktime($set_today_hour, $set_today_minute, $set_today_second, $get_today_month, $get_today_day, $get_today_year);

if($today_code != $lastreset_code)
{
  $ip_file = fopen($counter_path . "stats/ip.txt", "w");
  fputs($ip_file, "");
  fclose($ip_file);

  $lastreset_file = fopen($counter_path . "stats/lastreset.txt", "w");
  fputs($lastreset_file, "$new_reset_timestamp");
  fclose($lastreset_file);

  if(file_exists($counter_path . "stats/visitsjesterday.txt"))
  {
    unlink($counter_path . "stats/visitsjesterday.txt");
  }

  rename($counter_path . "stats/visitstoday.txt", $counter_path . "stats/visitsjesterday.txt");
  $visitstoday_file = fopen($counter_path . "stats/visitstoday.txt", "w");
  fputs($visitstoday_file, "");
  fclose($visitstoday_file);
}


//#####IP-Sperre#####
$test_ip = implode("", @file($counter_path . "stats/ip.txt"));

if (!strstr($test_ip, $REMOTE_ADDR))
{
  $ip_file = fopen($counter_path . "stats/ip.txt", "a+");
  $add_ip_to_file = sprintf("%s,",$REMOTE_ADDR);
  fputs($ip_file, $add_ip_to_file);
  fclose($ip_file);

  $visits_today_file = fopen($counter_path . "stats/visitstoday.txt", "r");
  $visits_today = fgets($visits_today_file, 100);
  fclose($visits_today_file);

  $visits_today_to_file = $visits_today + 1;

  $put_visits_today_file = fopen($counter_path . "stats/visitstoday.txt", "w");
  fputs($put_visits_today_file, "$visits_today_to_file");
  fclose($put_visits_today_file);

  $all_visits_file = fopen($counter_path . "stats/all_visits.txt", "r");
  $all_visits = fgets($all_visits_file, 100);
  fclose($all_visits_file);

  $all_visits_to_file = $all_visits + 1;

  $put_all_visits_file = fopen($counter_path . "stats/all_visits.txt", "w");
  fputs($put_all_visits_file, "$all_visits_to_file");
  fclose($put_all_visits_file);
}

$get_visits_today_file = fopen($counter_path . "stats/visitstoday.txt", "r");
$get_visits_today = fgets($get_visits_today_file, 100);
fclose($get_visits_today_file);

$all_visits_file = fopen($counter_path . "stats/all_visits.txt", "r");
$all_visits = fgets($all_visits_file, 100);
fclose($all_visits_file);

$get_visits_jesterday_file = fopen($counter_path . "stats/visitsjesterday.txt", "r");
$get_visits_jesterday = fgets($get_visits_jesterday_file, 100);
fclose($get_visits_jesterday_file);

$get_maxuseronline_file = fopen($counter_path . "stats/maxuseronline.txt", "r");
$get_maxuseronline = fgets($get_maxuseronline_file, 100);
fclose($get_maxuseronline_file);

if(!$invisible)
{
  eval("dooutput(\"".gettemplate($counter_path . "counter.htm")."\");");
}
?>
Wäre super, wenn mir das jemand fixen kann. DANKE!
Serena77 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.05.2007, 12:14  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Serena77,

zunächst Herzlich Willkommen im Forum.

Zitat:
Wäre super, wenn mir das jemand fixen kann. DANKE!
Sich selbst mit dem Thema nicht bechäftigen wollen und dann solche Forderungen zu stellen wird sicher keinen der hier Anwesenden mitreißen können...
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 15.05.2007, 21:08  
Neuer Benutzer
 
Registriert seit: 15.05.2007
Beiträge: 5
Serena77
Standard

Zitat:
Zitat von dr.e.
Hallo Serena77,

zunächst Herzlich Willkommen im Forum.

Zitat:
Wäre super, wenn mir das jemand fixen kann. DANKE!
Sich selbst mit dem Thema nicht bechäftigen wollen und dann solche Forderungen zu stellen wird sicher keinen der hier Anwesenden mitreißen können...
Oh Mensch, warum ist in jedem Forum immer irgendjemand der einen gleich richtig schief anmacht wenn man eine Bitte hat? Weißt Du, wenn ich die Zeit dafür hätte würde ich das vielleicht sogar tun, der Grund warum ich aber ein vorgefertigtes Script verwende und mir nicht selber eines schreibe ist, daß ich diese nicht habe. Es geht auch nicht ums Wollen, und, kannst Du Dir vorstellen, es soll sogar Menschen geben die einfach nicht dazu in der Lage sind sowas zu lernen, weil deren Stärken auf anderen Gebieten liegen?

Warum muß ich jetzt, um einen Counter auf einer Seite einzusetzen gleich eine ganze Sprache programmieren lernen, wenn es hilfbereite Menschen gibt?

Warum soll ich nicht davon ausgehen, daß, wenn es Menschen gibt, die freiwillig und kostenlos nur so zum Spaß ein Script für andere zur Verfügung stellen, es auch welche gibt, die auf eine Nachfrage hin einen Fehler in einem solchen beheben würden?

Ich stelle hier keine Forderungen sondern hatte nur eine Frage/Bitte, und es bleibt jedem selbst überlassen zu antworten oder auch nicht oder sogar einen Preis zu nennen oder auch einen Fingerzeig zu geben daß ich mich selber damit beschäftige - aber warum muß ich, völlig inhaltslos, angegriffen werden?

Ich verstehe das nicht. Ich bin selber in Foren aktiv in denen mit Sachen umgegangen wird die ich kann und verstehe und ich würde nie auf die Idee kommen jemandem auf eine simple Frage hin so zu antworten: entweder ich weiß was, und helfe dann, oder ich weiß, wer/was helfen kann und verweise weiter oder ich lasse es einfach weil mich die Frage nervt/langweilt... Und trotzdem gibt es auch in "meinen" Foren immer Leute die gleich unfreundlich werden. Verstehen kann ich es trotzdem nicht.

Tut mir leid daß ich es wagte. Vielleicht finde ich ein Forum zum Thema wo man noch Fragen stellen darf...

Gruß
Serena77 ist offline  
Alt 15.05.2007, 21:36  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Serena77, dieses wie die meisten anderen Foren ist dazu da, den Leuten zu helfen PHP zu erlernen, nicht ihnen kostenlos Arbeit abzunehmen. Das ist ein gewaltiger Unterschied. Außerdem basiert das Forum auf freiwilliger Arbeit. Wenn ich dein Posting sehe habe ich einfach keine Lust mich da reinzuwühlen, allein schon von der Art her wie du hier auftrittst. Nicht persönlich, ich kenne dich ja nicht, aber "macht ihr mal, keine Zeit" ist doch kein Argument. Ich hab ja auch nicht unendlich Zeit. Eine gewisse Netiquette musst du schon wahren.

Beschäftige dich etwas mit dem Problem, etwas mit PHP (es ist nie verkehrt sich ein wenig auszukennen), versuche den Fehler einzugrenzen, dann helfen wir dir gerne.
Zergling-new ist offline  
Alt 15.05.2007, 22:10  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Du darfst sicherlich noch Fragen stellen, aber dr.e. hat schon Recht (und es zudem sehr treffend und freundlich ausgedrückt). Es geht ja nicht darum, dass wir jetzt auf unser hohes Ross steigen und uns einfach nicht damit auseinander setzen wollen. Es geht vielmehr darum, dass wir auch nicht unendlich Zeit haben. dr.e. sagte es, so wie es ist: Es gehört schon etwas Glück dazu jemand mal eben für eine solche doch gerne etwas umfangreichere Arbeit zu finden. Und viel Geduld ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 15.05.2007, 22:57  
Neuer Benutzer
 
Registriert seit: 15.05.2007
Beiträge: 5
Serena77
Standard Entschuldigung

Also wenn ich schreibe "kann mir da jemand weiterhelfen?" und "Wäre super, wenn" und "DANKE", dann verstößt das gegen die Netiquette?

Und wer sagte etwas von kostenlos - man kann ja auch gerne ein Angebot machen!

Und "macht ihr mal, ich habe keine Zeit" - warum ist das kein Argument? Hat doch auch jemand gegeben, der dafür Zeit hatte das Script geschrieben und allen anderen die Zeit geschenkt, die die sich damit sparten - ist das der Einzige auf der ganzen Welt?

Und warum muß ich von "jedem etwas können"? Programmieren ist eben nicht mein Beruf, kann ich nicht, warum muß ich das jetzt also lernen? Ich darf doch auch zum Zahnriemenwechsel in die Werkstatt gehen und muß das nicht selber lernen. Lieber mache ich "meine" Sachen gut und investiere darin Zeit - und helfe mit dem was ich wirklich kann wiederum gerne anderen!

Außerdem begreife ich eines nicht ganz: laut Zergling muß ich mich nur "ein Bißchen " mit PHP und dem Problem beschäftigen und schon habe ich die Lösung - laut KingCrunch kann es aber eher eine "gerne etwas umfangreichere Arbeit" werden.

Ist es jetzt also tatsächlich ein klitzekleines Problem das mit minimalen PHP-Kentnissen gelöst werden kann und Ihr wollt wirklich einfach nicht kurz helfen, oder ist es ein Riesenact und zuviel Arbeit - dafür hätte ich dann wirklich Verständnis, aber dann muß ich PHP ja von grundauf dafür lernen?

Ich habe übrigens nicht gesagt, daß ich "SOFORT, JETZT GLEICH ABER AUF DER STELLE" eine Lösung fordere, ich habe freundlich um Hilfe gebeten von jemandem der will und irgendwann vielleicht Zeit hat wenn er mag (der Counter ist sicher nicht der Weltuntergang!)- und dafür ist ein Forum doch da, oder nicht?

Falls das wirklich so mißverständlich gewesen sein sollte, wiederhole ich nochmal den Inhalt in einer anderen Form:

Liebe Forenmitglieder, ich bin ein Noob, der leider zu doof zum Programmieren ist und sich deshalb irgendwo ein Script heruntergeladen hat. Dieses Counter-Script funktioniert leider nicht richtig. Da ich aber leider nicht die Zeit habe eine Programmiersprache zu lernen für einen winzigen Counter auf einer winzigen privaten Seite hoffe ich, daß sich vielleicht jemand findet der Spaß daran hat, mir mit diesem Problem weiterzuhelfen. Vielleicht kann mir ja bitte jemand einen Hinweis auf die fehlerhafte Logik oder einen fehlerhaften Befehl in dem Script geben, damit ich dann in SelfPHP gezielt nach einer Lösung suchen kann und nicht erst die Sprache von grundauf lernen muß. Oder vielleicht hat jemand bitte einen Link für mich, wo ich dieses Anliegen besser posten sollte. Oder vielleicht macht mir ja auch bitte jemand ein Angebot, wieviel eine Behebung des Fehlers kosten würde.

Vielleicht will mir bitte jemand bei meinem Problem helfen trotz meines Eingeständnisses daß ich selbst wohl nie eine Programmiersprache erlernen werde. Wenn ich irgendjemandem mit dieser unverschämten Bitte zu nahe treten sollte tut mir das leid!

Herzliche Grüße und vielen Dank im Voraus!
Serena77 ist offline  
Alt 15.05.2007, 23:51  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Naja belassen wir es jetzt dabei.

Als allgemeinen Tipp rate ich dir ein error_reporting(E_ALL); an den Beginn des Skriptes zu setzen.
Wenn Datei-Counter auf 0 gesetzt werden hat das häufig die Ursache, dass die Datei nicht gelesen werden kann. Daraus resulitiert das Ergebnis NULL, false o.ä. welches in INT konvertiert 0 ergibt. Somit wäre der Reset eventuell erklärt. An welcher Stelle weiß ich nicht. Sollte das Skript aber sauber programmiert sein, wird bei einem Lesefehler selbiger ausgegeben und somit durch error_reporting(E_ALL) auch sichtbar.

Wenn dein Counter nun mal wieder resetet, merk dir die Zeit und schau in den Logs nach, ob zu dieser Zeit ein PHP-Fehler oder -Notice geworfen wurde. Den kannst du dann hier posten.

Was ich dir anbieten könnte wäre, dass wir zusammen ein neues Counter-Skript schreiben, offenbar kann dein aktuelles Counter-Skript nicht viel außer zählen von Zugriffen und IPs, das haben wir in 15 Zeilen Code (naja fast) locker nachprogrammiert, aber etwas schicker und vielleicht dann sogar mit einem Report bei Fehlern
Zergling-new ist offline  
Alt 16.05.2007, 00:08  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Dem Skript fehlt ein Schutz vor race conditions. Wenn zwei Benutzer praktisch gleichzeitig auf die Seite zugreifen, können sich die beiden dann praktisch gleichzeitig laufenden php Instanzen beim Lesen und Schreiben stören. Instanz 1 öffnet die Datei zum Schreiben, Ergebnis: Datei ohne Inhalt. In diesem Moment liest Instanz 2 aus der Datei, Ergebnis: keine Daten. Instanz 1 schreibt seine Daten und schließt die Datei. Instanz 2 schreibt seine "Daten" und schießt die Datei, Ergebnis: Neustart.
Vielleicht suchst Du Dir besser ein neues Skript. Ich weiss aber nicht, ob es eine empfehlenswerte Seite für php Skripte mit Bewertung oder Besprechung der Skripte gibt.
Schnulli ist offline  
Alt 16.05.2007, 08:59  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard

schau mal hier rein:
http://www.developers-guide.net/foru...atei-basierend
Das ist zwar für ein Gästebuch gedacht - aber das kommt letztlich auf das gleiche raus.

und wenn du eine Datenbank zur Verfügung hast, dann rate ich dir von der text-Datei-version Abschied zu nehmen.

http://www.developers-guide.net/foru...rz-und-knackig
__________________
Aufstrebend, kompetent und werbefrei.
www.developers-guide.net
supertramp ist offline  
Alt 16.05.2007, 19:24  
Erfahrener Benutzer
 
Registriert seit: 07.07.2005
Beiträge: 150
sysop
sysop eine Nachricht über ICQ schicken
Standard

dann fällt mir ad hoc noch auf, dass statt der variablen $_SERVER['REMOTE_ADDR'] einfach nur $REMOTE_ADDR; verwendet wird, was dazu führen kann, dass deine ip datei überläuft, da permanent nur kommas eingetragen werden und nicht die gewünschte ip

du solltest im script unbedingt $_SERVER['REMOTE_ADDR'] verwenden.
__________________
gruss sys
sysop ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Counter in "selbstgestrickte" Homepage - wie? magro PHP Tipps 2008 11 30.03.2008 16:37
ein counter - und berechnungen netti PHP Tipps 2005-2 11 24.10.2005 21:03
Counter - Daten gelöscht - Erklärung?? havok PHP-Fortgeschrittene 5 20.10.2005 01:51
Counter - Daten gelöscht - Erklärung?? havok PHP Tipps 2005-2 9 18.10.2005 20:51
Counter! Boennchen PHP Tipps 2005 8 08.03.2005 10:08
Counter funktioniert, aber trotzdem wird Fehler gezeigt ... PHP Tipps 2005 4 07.03.2005 17:56
Suche Counter Script Beitragsarchiv 8 17.01.2005 13:42
Problem mit counter HTML, Usability und Barrierefreiheit 10 12.01.2005 06:04
Counter zusammen Zählen Blank PHP Tipps 2004-2 3 31.12.2004 12:04
Counter für registrierte user PHP Tipps 2004-2 3 26.12.2004 11:32
counter verschwindet immer! HILFE! PHP Tipps 2004 2 30.08.2004 11:02
counter PHP Tipps 2004 2 18.08.2004 11:02
counter mit ip sperre PHP Tipps 2004 9 08.08.2004 15:50
counter für gallerie Sclot PHP Tipps 2004 2 05.07.2004 15:36
Problem mit einem Counter JeeZ PHP Tipps 2004 6 18.06.2004 13:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mein mainboard setzt das datum immer zurück zum 31.12.2004, counter ip sperre php mit reset, besucherzähler setzt sich zurück php, php counter resettet immer wieder, besucherzähler stelle sich auf 0, php counter .txt immer gleich, php counter resettet sich vons elbst, besucherzähler stellt sich auf 0

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.