slakmann: problem mit zahlen - - bei fopen und fclose

Hallo,
folgendes problem:
ich wollte eine übung machen (also bitte nicht über den sinn und zweck des codes diskutieren), der bei jedem seitenaufruf die zahl einer txt-datei um eins verringert, sodass man eine begrenzte zahl an zugriffen realisieren könnte.
nur gibt es ein problem bei dem abspeichern der zahl in die txt datei und zwar immer dann, wenn sich die zahl um eine stelle verringert. also zB von 10 auf 9 und von 100 auf 99.
anstatt 9 speichert er 90 ab und anstatt 99 speichert er 990 ab.
ich habe eine vermutung (keine ahnung ob sie stimmt) und zwar, dass er sich die anzahl an stellen beim öffnen merkt und die gleiche anzahl beim speichern wieder übernimmt. da er aber eine zahl weniger hat als er abspeichert, setzt er eine null dahinter.

code:
    <?php
    $zeiger=fopen("zaehler.txt","r+");
    $zaehler=fgets($zeiger,5);
    if ($zaehler<=0)
    {
      echo "I'm sorry, visitor limit exceeded";
    }
    else
    {
      $zaehler--;
      rewind($zeiger);
      fputs($zeiger,$zaehler);
      fclose($zeiger);
      echo "Diese Seite dürfen Sie noch $zaehler-mal besuchen<br>";
    }
    ?>

wie kann man das elegant und ohne riesigen abfragen lösen ?

mfg slakmann

  1. Hell-O!

    ich habe eine vermutung (keine ahnung ob sie stimmt) und zwar, dass er sich die anzahl an stellen beim öffnen merkt und die gleiche anzahl beim speichern wieder übernimmt. da er aber eine zahl weniger hat als er abspeichert, setzt er eine null dahinter.

    Verwende für fopen einen anderen Modus als 'r+' oder kürze sie manuell.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
    1. Danke,
      ich habe aber nun eine neue und plausibelere Theorie und zwar:
      BSP: in der txt-Datei steht 10, er veringert es um eins und hat nur noch 9, die 9 speichert er ab und überschreibt dadurch die 1 von der 10. die 0 bleibt an zweiter stelle. also 90.

      1. BSP: in der txt-Datei steht 10, er veringert es um eins und hat nur noch 9, die 9 speichert er ab und überschreibt dadurch die 1 von der 10. die 0 bleibt an zweiter stelle. also 90.

        Deswegen musst du die Datei entweder über den Modus oder mittels ftruncate kürzen.

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
        Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
        1. hab ne andere Lösung gefunden.
          einmal zwischendurch fclose machen und mit fopen(...,w+) den inhalt löschen und dann per fputs einfügen.