You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Thursday, July 17th 2003, 12:03pm

Counter Programmieren Teil 1

Ein einfacher Counter ohne Cookies und ohne Datenbank
ein counter soll in erster linie nichts anderes machen als beim aufruf einer seite den bestehenden wert auf einer textdatei zu lesen, den aktuellen besucher mit +1 dazu zu addieren und den neuen wert wieder in der textdatei abzulegen. der neu abgelegte werd kann dann abgerufen werden und in beliebiger form ausgegeben werden. beschränken wir uns an der stelle erst mal auf die reine textausgabe. auf das html gerüst der seite möchte ich garnicht weiter eingehen. gehen wir also gleich an den php teil der die textdatei einließt, +1 addiert und das ganze dann speichert und als einfachen text ausgibt.

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if(!file_exists("count.txt"))
    {
        fopen("count.txt","a");
        fclose("count.txt");
    }
$counter=fopen("count.txt","r+");
$aufruf=fgets($counter,100);
$aufruf=$aufruf+1;
rewind($counter);
fputs($counter,$aufruf);

echo $aufruf;

fclose("count.txt");
?>

erläuterung
der teil in der if bedingung dient dazu zu ermitteln ob die datei bereits vorhanden ist. wenn nicht wird sie mittels fopen und dem atribut "a" (add) angelegt. falls diese vorhanden ist wird der teil übersprungen da die if bedingung nicht erfüllt ist. dabei wird der befehl "file_exists" angewendet welcher true oder false zurück liefert. durch das "!" davor negiert man quasie die abfrage. das heißt es heißt dann nicht mehr "wenn die datei existiert dann mach dies und jenes" sondern "wenn die daten nicht existiert dann mach dies und jenes".
danach wird nun die vorhandene datei in den schreib/lese zugriff genommen (atribut "r+") und mit fgets wird nun beginnend am anfang der datei eine zeichenkette eingelesen die entweder 100 zeichen lang sein kann oder maximal bis zum zeilenende. diese zeichenkette befindet sich nun in der variable "$aufruf". die zeichenkette ist bei uns auf jeden fall numerisch und kann somit ganz einfach mit rechenoperationen angewendet werden. wir addieren also die zahl 1 (für den aktuellen besucher). durch den befehl "rewind" erreichen wir das die cursor position nun wieder an den anfang der noch offenen textdatei spring. wir möchten den neuen counterstand ja über den alten schreiben und nicht hinten dran hängen. der befehl fputs bewirkt nun das die datei mit dem neuen wert gespeichert wird. der echo befehl gibt uns nun ganz einfach den inhalt der variable "$aufruf" aus in der sich der aktuelle counterstand befindet.

dieses kurze skript reicht schon aus um einen einfachen zähler zu generieren. allerdings fehlen hier einige elemente die zum beispiel verhindern das durch drücken von "reload" der counterstand in die höhe getrieben werden kann. er ist somit also nur als basis erläuterung zur vorgehensweise gedacht und sollte auf jeden fall weiter ausgebaut werden. wie man diesen counter nun erweitert beschreibe ich im nächsten Teil meines kleinen Counter Tut's
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

2

Wednesday, March 17th 2004, 8:18am

RE: Counter Programmieren Teil 1

dazu mal ein paar fragen:

1) Sollte ich nach dem fopen bei !file_exists nicht auch ein fclose machen, da die datei ja sonst offen bleibt ?

2) Der mit fgets ausgelesene Wert wird doch in $aufruf gespeichert und nicht in $counter oder ?

3) warum auch kein abschliessendes fclose um die datei $counter zu schliessen?
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Wednesday, March 17th 2004, 8:41am

zu 1 und 3 ... stimmt, das fclose hab ich total verpeilt. code ist geändert.

zu 2

Quoted

PHP Source code

1
2
$counter=fopen("count.txt","r+");
$aufruf=fgets($counter,100);

dabei ist die variable $counter der dateizeiger und die variable $aufruf enthält den inhalt welcher gelesen wurde. in dieser wird der inhalt der datei beginnent ab pointer position bis zum 100ten zeichen gelesen.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

4

Wednesday, March 17th 2004, 8:48am

ja aber ich glaube mein punkt 2 ist immer noch nicht behoben. du sagst nämlich:

danach wird nun die vorhandene datei in den schreib/lese zugriff genommen (atribut "r+") und mit fgets wird nun beginnend am anfang der datei eine zeichenkette eingelesen die entweder 100 zeichen lang sein kann oder maximal bis zum zeilenende. diese zeichenkette befindet sich nun in der variable "$counter".

und diese zeichenkette befindet sich aber doch in $aufruf.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

5

Wednesday, March 17th 2004, 8:49am

nun hast du in deiner antwort zwar geschrieben aber oben stehts ja immer noch verkehrt. schade dass ich mein post nich editieren kann.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

6

Wednesday, March 17th 2004, 9:01am

stimmt ... bis jetzt scheinbar noch niemand aufgefallen. ich les nochmal drüber und berichtige das mal.

so jetzt sollte alles stimmen.

das du keine beiträge editieren kannst liegt daran das wir hier leider schon user hatten die meinten weil sie sich über was geärgert haben einfach ihre postings zu löschen und somit sehr viele themen total kaputt gemacht haben. deswegen bleibt diese funktion auch weg.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

logix

Trainee

Posts: 78

  • Send private message

7

Tuesday, November 28th 2006, 11:30pm

Kannst du nochmal sagen, was in der Variabel $counter abgelegt wird. Die Referenz auf die Datei "counter.txt" und einen Positionszeiger, oder?

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

8

Wednesday, November 29th 2006, 11:09am

Die Variable $counter ist das Datei Handle welches auf die Datei count.txt verweist. Das heißt anhand dieses Dateizeigers wird der Inhalt der Textdatei gelesen. Anschließend wird der Dateizeiger mit rewind wieder auf den Anfang der Datei gestellt damit der neue Wert gespeichert werden kann. Das heißt Du könntest z.B. auch sagen ich lese zuerst die ersten 20 Stellen ein und anschließend in eine andere Variable die nächsten 20 Stellen.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel