ThE FeGm: Counter, lesen, zurücksetzen

Hallo zusammen!

Wer kann mir sagen wie ein Skript aussieht, mit dem ich den Inhalt von der Datein Count.txt (Chmod 777) auf den Wert "0" bringen kann?

Wer kann mir sagen wie ein SKript aussieht um den Inhalt von count.txt zu sehen?

Wer kann mir sagen wie ich den Inhalt count.txt um beine erhöhe? Also von zb.: '1' auf '2' oder von '5' auf '6'?

Ich danke für alle Antworten!! Ich habe es scon mit den Texten von SelfHTML probiert doch ich schaffe es nciht.... :-( Kann mir jem,and die drei fragen als COde hier posten? Das wäre super nett!!!

Vielen Danke´!

  1. Hallo ThE,

    Wer kann mir sagen wie ein Skript aussieht, mit dem ich den Inhalt von der Datein Count.txt (Chmod 777) auf den Wert "0" bringen kann?

    Wer kann mir sagen wie ein SKript aussieht um den Inhalt von count.txt zu sehen?

    Wer kann mir sagen wie ich den Inhalt count.txt um beine erhöhe? Also von zb.: '1' auf '2' oder von '5' auf '6'?

    Ich.

    Bis dann!

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
    1. Könntest du mir es dann uch hier posten???

    2. Na, so ganz ohne Antwort lasse ich dann doch niemanden stehen... ;-)

      Wer kann mir sagen wie ein Skript aussieht, mit dem ich den Inhalt von der Datein Count.txt (Chmod 777) auf den Wert "0" bringen kann?

      So:

      <?php  
      $fn = fopen("Count.txt", "w");  
      if($fn)  
      {  
       fwrite($fn, "0");  
       fclose($fn);  
      }  
      ?>
      

      Wer kann mir sagen wie ein SKript aussieht um den Inhalt von count.txt zu sehen?

      <?php  
      list($counter) = file("Count.txt");  
      echo $counter;  
      ?>
      

      Wer kann mir sagen wie ich den Inhalt count.txt um beine erhöhe? Also von zb.: '1' auf '2' oder von '5' auf '6'?

      Erst den Counter wie eben beschrieben auslesen, dann dieser Code:

      <?php  
      $counter++;  
      $fn = fopen("Count.txt", "w");  
      if($fn)  
      {  
       fwrite($fn, $counter);  
       fclose($fn);  
      }  
      ?>
      

      Wenn du selbst PHP lernen willst kann ich dieses Tutorial wärmstens empfehlen. ;-)

      Bis dann!

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
      1. Hello Marc,

        Das ist aber so nicht richtig.
        Ein Counterscript steht i.d.R. mehreren Usern zur Verfügung, die voneinander nichts wissen. Deshalb muss man versuchen, dass das Script darauf Rücksicht nimmt. Einen "normalen" Server vorausgesetzt (es gibt hier berechtigte Einwände von Eddi, wenn man Multiprozess(or)-Sytsteme benutzt), helfen dabei die Lock-Funktionen von PHP.

        Wer kann mir sagen wie ein Skript aussieht, mit dem ich den Inhalt von der Datein Count.txt (Chmod 777) auf den Wert "0" bringen kann?

        @ThE FeGm:

        Wofür sollen die Dateirechte 0777 gut sein? Und 'chmod' ist ein Programm und kein Zustand!
        Es reicht, wenn der Webserver Schreib- und Lesezugriff hat.

        Ich mach mal ein ganz einfaches Besipiel und beschreib's Dir mal ausführlich.
        Den Link poste ich dann hier.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo Tom,

          Das ist aber so nicht richtig.
          Ein Counterscript steht i.d.R. mehreren Usern zur Verfügung, die voneinander nichts wissen. Deshalb muss man versuchen, dass das Script darauf Rücksicht nimmt. Einen "normalen" Server vorausgesetzt (es gibt hier berechtigte Einwände von Eddi, wenn man Multiprozess(or)-Sytsteme benutzt), helfen dabei die Lock-Funktionen von PHP.

          Ich weiß, ich selber nehme auch immer die flock-Funktion.
          "The FeGm" hatte danach aber nicht gefragt, und bei einem Counter kann man das bei niedrig frequentierten Seiten noch vernachlässigen... ;-)

          Bis dann!

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
          http://emmanuel.dammerer.at/selfcode.html
          1. Hello,

            Ich weiß, ich selber nehme auch immer die flock-Funktion.
            "The FeGm" hatte danach aber nicht gefragt, und bei einem Counter kann man das bei niedrig frequentierten Seiten noch vernachlässigen... ;-)

            Nö, kann man nicht, da man auch bei niedrig frequentierten Seiten damit rechnen muss, dass jemand zurückschreiben lässt, während ein anderer Besucher gerade zum Zwecke des Zählens (als der Veränderung) die Daten lesen lässt.

            Die Trefferwahrscheinlichkeit hat direkt nichts mit der schlechten Programmierung zu tun.

            Wenn es sich zum Beispiel um ein Gebotsscript von electronic-buy handelt, und auf den Artikel insgesamt nur drei Leute bieten werden, aber alle drei bis zum letzeten Moment warten, dann würde das "in die Hose gehen" können. Obwohl die Seite nur drei Besucher in acht Tagen hat.

            Ist natürlich nur ein Vergleich, darum hinkt er auch ;-)

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
  2. Hello,

    Wer kann mir sagen wie ein SKript aussieht um den Inhalt von count.txt zu sehen?

    Ich auch. :-)

    *scnr*
    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  3. Und wer kann es hierhinschreiben und tut es auch???

    1. Hallo The FeGm,

      Und wer kann es hierhinschreiben und tut es auch???

      Ich, ich, ich!
      Übrigens schon eine Minute vor deinem Post hier. ;-)

      Bis dann!

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
  4. Hallo ThE FeGm!

    Suchst du einfach nur ein Hitcounter-Script?
    Mal davon abgesehen, dass solche Hitcounter keinen großen Sinn machen,
    ist hier ein brauchbares Beispiel mit Anleitung:
    http://www.lima-city.de/tutorials?m=show&id=1224

    --
    EisFuX
    1. Hello,

      [...]ist hier ein brauchbares Beispiel mit Anleitung:
      http://www.lima-city.de/tutorials?m=show&id=1224

      Für das Beispiel gilt auch, dass der konkurrierende Betrieb nicht berücksichtigt wurde, obwohl der Autor sogar noch selber darauf hinweist, dass das nötig wäre...

      <cite>
      Die Hitcounter-Datei wird zum gleichzeitigen Lesen und Schreiben geöffnet.
      Wir wollen alle Manipulationen an der Datei in einem Aufwasch durchführen.
      Sonst könnte in der Zwischenzeit ein anderes Skript dazwischenfunken und unsere Datei unbrauchbar machen.
      </cite>

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. [...]ist hier ein brauchbares Beispiel mit Anleitung:
        http://www.lima-city.de/tutorials?m=show&id=1224

        Für das Beispiel gilt auch, dass der konkurrierende Betrieb nicht berücksichtigt wurde, obwohl der Autor sogar noch selber darauf hinweist, dass das nötig wäre...

        Hmm, die Betonung lag ja auch auf "brauchbar" und nicht auf perfekt. Es sollte brauchbar sein, um FeGm seinem Ziel,
        einen schnuckeligen Hitcounter auf seiner Seite zu präsentieren, näher zu kommen, als ewiglang die Einzelheiten zu
        erläutern.

        Könntest du ein paar Erklärungen nachschieben, was mit der "Nichtberücksichtigung des konkurrierenden Betriebes" gemeint ist?
        Fehlen die lustigen "flock()s"? Würden die das Problem beheben?

        --
        Und da wundern wir uns, dass die Mehrheit deutscher Abiturienten Heraklit für
        einen Dämmstoff hält.
        (Frank Lüdecke)
        1. Hello,

          Könntest du ein paar Erklärungen nachschieben, was mit der "Nichtberücksichtigung des konkurrierenden Betriebes" gemeint ist?
          Fehlen die lustigen "flock()s"? Würden die das Problem beheben?

          Ja, die fehlen.

          ich hatte das gerade irgendwo hier mal wieder näher beleuchtet.
          Eddi (Berlin) hatte dazu auch schon etliche Postings abgegeben, da flock() nicht ohne Berücksichtigung des OS die Lösung ist. Da besteht wohl in der Implementation (ggf. auch des Filesystems, auf dem es nicht funktiomniert) ein Bug.

          i.d.R. Sollte eine Programmiersprache, wenn sie sich denn direkt der API des OS bedient, keine Probleme bekommen. Das aber nur am Rande...

          Wir fassen mal zusammen:

          Die Counter-Daten werden ausschließlich und in genau einer Datei gespeichert.
          Für das Auslesen und das Verändern des Counters werden immer dieselben Scripte verwendet.
          Hierzu werden von unterschiedlichen Prozessen eigene Instanzen davon gebildet.
          Diese Intanzen wissen ersteinmal nichts voneinander.
          Die gemeinsamen Ressourcen dieser Instanzen sind

          • die Datendatei des Counters
          • die API des OS, die durch die Scripte angesprochen wird.

          Um zu verhindern, dass eine Instanz des Counters gerade die Daten holt, um die anschließend zu verändern und wieder wegzuschreiben, während eine andere Instanz gerade schon die Löschung (Leerung) der Datei veranlasst hat, um die bereits veränderten Daten wegzuschreiben, bedient man sich einer gemeinsamen Funktion, die für eine Serialisierung und "Taktung" der Vorgänge sorgt.

          Diese Funktion muss (zumindest in wichtigen Teilen) tief im OS (Filesystem) verankert sein und darf nicht umgangen werden. Es gibt hier z.Zt. zwei geläufige Methoden:

          Das Mandatory Locking  (befehlendes Sperren, zwingendes Warten)
            Hierbei unterwerfen sich jegliche Dateifunktionen dem Mechanismus der Sperrfunktion und
            können diese nicht umgehen. Auch Programme, die bei ihrer Erstellung keine Rücksicht
            auf Locking genommen haben, können dadurch "abgefangen" werden, da der Sperrmechanismus
            auf Filesystem-Ebene stattfindet.

          Das Advisory Locking (beratendes Sperren, freiwilliges Warten)
            Hierbei müssen Programme gestzte "Flags" oder "Semaphore" eigenständig beachten und
            entsprechend berücksichtigen. Wurde der erforderliche Mechanismus nicht beim Programmentwurf
            eingebaut, bekommt das Programm nichts von der Empfehlung mit und es geschehen schwere
            Fehler.

          Beide Verfahren teilen sich in die

          • Beantragung (und wiederfreigabe) der Sperre
          • Berücksichtigung der Sperre

          Das komplizierte beim Setzen von Sperren liegt in der Tatsache, dass das OS (Filesystem) mitgebekommen muss, ob der Prozess, dem die Sperre gehört, noch lebt. Wenn nämlich der Prozess
          stirbt, ohne dass das OS dies merkt, könnten sich "vagabundiernde" Sperren ansammeln, die
          schon lange nicht mehr gültig sind aber trotzdem noch sperren. Die beiden Verfahren funktionieren daher also nur bei verbindungsbezogener, zustandsgebundner Kommunikation.

          Auf den beiden genannten Verfahren baut dann auf Applikationsschichtebene das "academic Locking"
          auf. Es ist ein "Wissens-Locking" (daher der Name). Es dient der Implementation von Kontrollmechanismen in verbindungsloser, zustandsloser Kommunikation, also auch für Webanwendungen.

          Man speichert hier im Datenstamm einen Merker, der die letzte Veränderung registriert. Auch auf dieser Schicht gibt es die Unterscheidung von advisory und mandatory academic locking. Wird der Locking-Mechanismus vom DBMS übernommen, ist es ein mandatory academic Locking, wird er von der API (also z.B. PHP) implementiert, ist es ein advisory academic locking, da andere Applikationen ja nichts davon wissen können.

          Das ist nun nochmal ein Auszug aus meinem immer noch nicht fertigen Artikel zum Thema Locking.

          Es gilt:

          Sollen Daten verändert werden, muss das Lock mit EXCLUSIVE bereits vor dem Holen der Daten beantragt werden und unverzüglich verändert, zurückgeschrieben und wieder entsperrt werden.

          Sollen Daten lediglich in gültiger Form [1] angezeigt werden, reicht ein SHARED Lock, dass
          aber ebenfalls sofort nach dem Holen der Daten wieder gelöst werden muss.

          [1] Man kann Daten auch ohne jedes Lock auslesen, läuft dabei aber dann Gefahr, dass diese verstümmelt oder sonstwie ungültig sein können, da ein andere Prozess sich gerade mitten in
          der Veränderungsphase befindet. Dieser Fehler ist natürlich nur bei advisory Locking möglich.
          Bei mandatory locking könnte man während des eigentlichen Veränderungsvorganges [2] nicht lesen.

          [2] Ein Veränderungsvorgang (Datenmanipulation) besteht immer aus einem gültigen Holen
          (lesen der Daten), deren Veränderung und dem Wegschreiben. Dieser Vorgang muss auf der
          unteren Schicht mit ein und demselben Handle erledigt werden.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau