Neuigkeiten:

still alive...

Hauptmenü

cursor in eine Zeile einer Datei setzen

Begonnen von maui muc, 20. Februar 2006, 18:33:54

Vorheriges Thema - Nächstes Thema

maui muc

Hallo,
ich bastle gerade an einem Counter. Klar die gibt es schon tausendfach fertig aber ich will es dennoch selbst schaffen.
Gerne würde ich für jeden Monat in der Counter-Datei eine neue Zeile beginnen um auch eine art Statistik führen zu können.
Fseek kenne ich aber damit lässt sich der Cursor nur an den Anfang der Zeile setzen.
Gibt es etwas ähnliches auch um die Zeile zu bestimmen?
Beste Dank
Stefan

Hallo,
es ist vielleicht nicht die Antwort, die du dir erwartet hast, aber sie kann dir auch helfen.
Gehe doch mal von deiner jetztigen Überlegung weg und probiere mal folgendes. Lies deine komplette Datei in ein Array ein. So kannst du bequem Zeile für Zeile bearbeiten. Dies wird dir bspw. bei einer Auswertung sehr entgegen kommen. Zudem kann man in PHP Array wesentlich leichter modifizieren, als bspw. in C#, was ein großer Vorteil ist!
 
kOOni

maui muc

Danke für den guten Tipp. Ich schreibe einfach bei jedem Zugriff die ganze Datei neu.


// Zeile als Array
$file=fopen(\\\"count.txt\\\",w);
...
// ggf. Zeile hinzufügen
$zeile[$monat]=(++$count)
// File überschreiben
foreach ($file as $fzeile) {
fputs($file, $zeile.\\\"\\\\n\\\");
}
$file=fclose($filew);

 
Was würde passieren wenn zwei Besucher die Seite genau gleichzeitig öffnen würden.

Nabend Maui Muc.
Gute Frage. Ehrlich gesagt weiß ich es nicht so genau, aber ich glaube, dass das dann wie folgt ablaufen würde:
User 1 löst den Counter aus. Die Datei wird eingelesen und aktualisiert. Während die Datei noch aktualisiert, also neugeschrieben und abgespeichert, wird, löst der User 2 ebenfalls den Counter aus. Nun würde das Gleiche wie bei User 1 ablaufen, nur mit dem Unterschied, dass das OS, welches auf dem Server läuft, die Datei, welche durch den User 2 im Begriff ist, gespeichert zu werden, einfach gepuffert wird.
Das heisst, dass erst die Dateioperation des Users 1 abgeschlossen wird. User 2 hat ja noch die \"alten\" Daten drin, also nicht die \"neuen\", welche von User 1 generiert wurden. Somit überschreibt dieser dann die Datei einfach mit den eigenen Werten.
Das Problem ist, wenn es denn wirklich so sein sollte, dass die Daten von User 1 verloren gehen würden.
Alternativ dazu könnte man eine kleine Sperre einbauen, die vorher prüft, ob die Datei schon genutzt wird. Wenn ja, dann sollen die Daten erstmal irgendwo abgespeichert werden. Und fertig. Ruft dann ein User 3 den Counter auf, so wird geprüft, ob es noch temporäre Daten gibt, also Daten, die noch nicht \"richtig\" abgespeichert wurden, dann sollen diese erstmal gespeichert werden und die Daten des User 3 werden dann einfach hinten dran gehangen.
Das ist sehr konstruiert von mir. Betrachte es einfach als wacklige Konstruktion, die du mit Code stabilisierst.
Weiß eigentlich jemand, was passiert, wenn wirklich 2 oder mehrere User (fast) zeitgleich auf ein und die selbe Datei zugreifen? Es muss da doch eine Pufferung von Seiten des Betriebssystems standfinden, da ja sonst Anwendung oder das System abschmieren würde. (Stichwort: schreiben in nicht vorhandene Speicherbereiche)
Ein wenig unverständlich und hochtrabend geworden. Ich hab grad nen wissenschaftlichen Artikel gelesen und bin deshalb noch ein wenig verdreht  :gaga:
 
kOOni

maui muc

Ich glaube eine recht gute Lösung gefunden zu haben. Siehe Code-Zeile 41-46.
Zugegeben, das Problem ist schon ziemlich konstruiert da die Dateiverwaltung eigentlich das OS übernehmen müsste aber es wäre doch schade wenn der Counter-Log-File schaden nehmen würde.
Gruß
Stefan

								

all your base are belong to us / Discord