Dateiproblem mit kleinem Zähler

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateiproblem mit kleinem Zähler

    Hallo,
    ich habe ein Problem mit einem php-Zähler.

    Code:


    PHP-Code:


    $datei1 
    "allehits.log"

    //Gesamtzähler auslesen 
    if (file_exists($datei1)) { 
       
    $oeffnen fopen($datei1"r"); 
       
    $allehits fread($oeffnenfilesize($datei1)); 
       
    fclose($oeffnen); 
       } 
    //Zähler erhöhen 
    $allehits++; 

    //Gesamtzähler speichern 
    if (file_exists($datei1)) { 
    $oeffnen fopen($datei1"w"); 
    fwrite($oeffnen$allehits); 
    fclose($oeffnen); 

    Zur Funktion:
    Bei jedem Seitenaufruf wird eine Zahl aus einer Datei geladen, um eins erhöht und wieder in die Datei gespeichert. Dies Funktioniert auch zu 99%.

    Problem:
    Es tritt ab und zu auf, dass die Datei, in der die Zählerzahl steht, gar nichts mehr enthält ("").
    Ich nehme an, die Usache liegt darin, dass 2 Seitenbesucher gleichzeitig auf die Datei zugreifen. Aber auch damit kann ich mir das nicht wirklich erklären.

    Hat wer eine Idee, woran es liegt und/oder was man dagegen unternehmen kann?

    Einen anderen Zähler kann ich nicht nehmen, da ich die Zählerdaten weiterverwende.

    Auf Hilfe hoffend
    Xelos
    Zuletzt geändert von asp2php; 06.09.2004, 08:05.

  • #2
    Re: Dateiproblem mit kleinem Zähler

    Mach mal in einem Rutsch
    PHP-Code:

    $datei1 
    "allehits.log"

    if (
    file_exists($datei1)) { 
       
    $oeffnen fopen($datei1"w+"); 
       
    //Gesamtzähler auslesen 
       
    $allehits fread($oeffnenfilesize($datei1)); 
       
    //Zähler erhöhen 
       
    $allehits++; 
       
    //Gesamtzähler speichern 
       
    fwrite($oeffnen$allehits); 
       
    fclose($oeffnen); 

    Kommentar


    • #3
      Danke für deine Antwort.
      Es würde sicherlich die Verarbeitung etwas beschleunigen.
      Das Problem würde es aber nicht beheben.
      Es gibt Stichzeiten, bei denen es nicht selten vorkommt, dass mehrere Zugriffe gleichzeitig erfolgen.

      Gruß
      Xelos

      Kommentar


      • #4
        von diesem buch gibt es ein fast identisches beispiel
        http://www.bhv-buch.de/vmi/bhv/detail/pWert/7151

        PHP-Code:
        <?
        $dateiname = "zaehler.txt";
        $zaehler = 0;
        if(file_exists($dateiname))
        {
          $datei = fopen($dateiname, "r");
          if ($datei)
          {
             $zaehler = fgets($datei, 255);
             fclose($datei);
          }
        }
        $zaehler++;
        $datei = fopen($dateiname, "w");
        if ($datei)
        {
          fputs($datei, $zaehler);
          fclose($datei);
        }
        ?>
        <html>
        <head><title>Besucherz&auml;hler</title></head>
        <body>
        <?
        echo "Sie sind der $zaehler. Besucher<br>\n";
        ?>
        </body>
        </html>
        denn hatte ich am anfang immer genutzt bis ich mir was mit datenbankunterstützung zusammengeschustert habe und der hat immer funktioniert und sich auch ncith auf 0 zurückgesetzt.

        scheint bis auf 2 if abfragen und der filzise identisch mit deinem zu sein

        fputs / fgets ist das gleiche wie fread und fwrite - also nicht verwirren lassen

        gruß jochen

        Kommentar


        • #5
          Danke Jochen

          Was bewirkt denn diese Zeile?
          PHP-Code:
          if ($datei){

          Also das spezielle abfragen der Variabel $Datei.

          Gruß
          Xelos

          Kommentar


          • #6
            wen das Öffnen der Datei mislungen ist dann erhält $datei von fopen den Wert false

            Kommentar


            • #7
              Das könnte es gewesen sein.
              Danke für eure Hilfe. Werd es jetzt mehrere Tage mal austesten.

              Gruß
              Xelos

              Kommentar


              • #8
                Auch das hat leider nicht den gewünschten Erfolg gebracht.
                Es gab wieder die Situation, dass nichts mehr in der Zählerdatei vorhanden war.

                Woran könnte dies noch liegen?

                Gruß
                Xelos

                Kommentar


                • #9
                  versuch mal:
                  PHP-Code:
                  $allehits intval(fread($oeffnenfilesize($datei1))); 

                  Kommentar


                  • #10
                    Hallo asp2php,
                    würdest du mir erklären, was das bewirkt? Bin doch noch PHP-Neuling

                    Gruß
                    Olaf

                    Kommentar


                    • #11
                      liest mal die 4 Buchstaben in meiner Signatur

                      Kommentar


                      • #12
                        abgesehen davon würde mcih mal interessieren, wann dies geschieht.
                        von er logik her dürfte das nie passieren, da ja die datei immer nur mit dem inhalt der variable $zaehler überschrieben wird.

                        am anfang ist diese 0
                        bei erfolgreichen öffnene der datei übernimmt sie den wert
                        wird um eins hochgezählt (also 1 oder wert der datei+1)
                        und wird dann in die textfile geschrieben

                        das da nichts drin ist in der textfile, dürfte somit nie geschehen.
                        ich hatte dieses script ca. ein jahr im einsatz und das ist nie passiert

                        hast du schon eine vermutung, wann dieser sachverhatl eintritt?

                        Kommentar


                        • #13
                          Hallo Jochen,
                          du hast recht, es dürfte nie passieren. Ich habe das Script auf all meinen Webpräsenzen laufen. Auf den weniger gut besuchten läuft es auch ohne Fehler.
                          Nur bei der einen, die deutlich besser besucht ist, wie die anderen, tritt dieser Fehler auf. Es liegt alles auf dem selben Server. Jede Seite hat also die gleichen Vorraussetzungen.

                          Eine glaubwürdige vermutung habe ich auch nicht.
                          Aber wenn die Datei leer ist, so muss ja der Schreibprozess wenigstens begonnen haben und wurde dann aus irgend einem Grund unterbrochen.
                          Würde der Zähler nicht ausgelesen werden können, so würde auch spättestens bei $allehits++; eine Fehlermeldung kommen und somit ja die Verarbeitung unterbrochen werden. Es dürfte also in dem Fall auch nichts gespeichert werden.
                          Aus diesem Grund wird wohl auch intval da nichts verändern.
                          Intval würde ja nur, sobald die Datei keinen Inhalt hat, daraus eine 0 machen. (Wenn ich das richtig sehe)
                          Ich bin da komplett Ratlos.

                          Gruß
                          Xelos

                          Kommentar


                          • #14
                            Noch mal zur Info:
                            Intval hat das Problem leider nicht behoben. Hatte es seit gestern abend eingebaut. Heute gegen Mittag trat das Prob in sofern wieder auf.
                            Ob intval nun aus dem"" eine 0 gemacht hat, kann ich nicht sagen, da ich aus Sicherheitsgründen schon vorher eine Zeile eingebaut hatte, dass wenn $allehits="" dann $allehits=0.

                            Gruß
                            Xelos

                            Kommentar


                            • #15
                              ich muss gestehen, ich bin ratlos.

                              falls dein webspace dir ne datenbank anbietet würde ich mir einen counter mit datenbankunterstützung zusammenbastel.

                              Kommentar

                              Lädt...
                              X