Hallo,
Zumal deine alternative Methode nach und nach das Verzeichnis mit nutzlosen Dateien zumüllt, die man eigentlich auch irgendwann wieder entsorgen sollte - und schon ist der Vorteil "eine Dateioperation weniger" wieder dahin.
Verzeichnis zugemüllt? Wie kommst Du darauf, nur eine Datei erhält ständig einen neuen Namen:
touch()
ja, du würdest ständig Dateien mit immer neuen Namen erzeugen, die vorhandenen bleiben aber liegen.
Bedenke, was touch() wirklich macht:
* falls die Datei schon existiert, wird ihr Modifikationsdatum auf "jetzt" gesetzt
* falls die Datei noch nicht existiert, wird sie mit 0 Byte neu angelegt
Ja, das mit den gleichzeitigen Zugriff betrifft beide Methoden und bringt mich mal zu einer neuen Frage: Wieviel exakt ( auf die Microsekunde genau) gleichzeitige Zugriffe kann PHP verkraften und geht wie damit um?
Die Frage stellt sich so nicht. Wirklich gleichzeitig kommen die Requests normalerweise nicht, denn selbst auf einem Mehrprozessorsystem gibt es irgendwo Flaschenhälse, die einzelne Operationen zwangsläufig serialisieren. Die Frage ist eher: Hat die Verarbeitungskette eine Stelle, an der sie durch einen anderen Prozess unterbrochen werden könnte?
Machen wir ein Beispiel mit der klassischen Methode, die du zuerst genannt hast. Zwei Requests, hier A und B, werden kurz hintereinander bearbeitet, so dass sie sich zeitlich überschneiden.
Request A Request B
---------------------------------------
Öffne Datei zum Lesen n/a
Lies den Dateiinhalt n/a
-> "42"
------- Task-Switch -------------------
Öffne Datei zum Lesen
Lies den Dateiinhalt
-> "42"
Wandle String in Zahl
-> 42
Erhöhe den Zahlenwert
-> 43
------- Task-Switch -------------------
Wandle String in Zahl
-> 42
Erhöhe den Zahlenwert
-> 43
Wandle Zahl in String
-> "43"
Überschreibe Dateiinhalt
Schließe Datei
- fertig -
------- Task-Switch -------------------
Wandle Zahl in String
-> "43"
Überschreibe Dateiinhalt
Schließe Datei
- fertig -
So, in deiner Counter-Datei steht jetzt der Wert 43, obwohl zwei Zugriffe stattfanden und der Zählerwert eigentlich schon 44 sein müsste. Erkennst du das Problem?
[...] oder würdest du beim Führerscheinerwerb auch direkt mit einem LKW Fahrstunden machen wollen?
Wenn ich mit "Null" anfange, aber den festen Vorsatz habe, demnächst mit einem LKW zu fahren ... ja. Dann würde ich mich direkt für den LKW-Führerschein anmelden, aber vermutlich würde dann die Fahrschule trotzdem darauf bestehen, dass ich auch einige Stunden mit einem PKW absolviere - schon allein deshalb, weil man mit einem LKW niemals mehr als 80km/h fahren wird (bzw. darf) und daher gar kein Gefühl für höhere Geschwindigkeiten entwickeln kann.
Andererseits fand ich es damals, vor der Reform der Führerscheinklassen, schon erschreckend. Man stelle sich vor, da hat jemand Fahrstunden auf einem Golf gemacht, und mit dem Auto auch die Prüfung abgelegt. Nun hatte derjenige den "3er" in der Hand - und was durfte er damit fahren? Ich hab mal das erlaubte Maximum zusammengestellt:
Ein LKW (7.49t) mit einem Anhänger (Tandemachse, 11t)
Da fährt also der einstige Golf-Fahrschüler nun mit einem Zug von rund 18t, 2.50m Breite und 18m Länge durch die Gegend - der alte Klasse-3-Führerschein gab's her. Auch einen Bagger hätte man mit dem alten 3er auf der Straße fahren dürfen (allerdings nur einen mit Rädern, nicht mit Ketten, und nur mit gesicherter Schaufel), oder vergleichbare große Baumaschinen. Faszinierend.
Aber ich schweife ab. Was wollte ich sagen? ... Ach ja: Wenn ich mit einem Thema neu anfange, werde ich mich sicher erst einmal mit einfachen Aufgaben beschäftigen. Aber wenn ich bereits "große" Ziele vor Augen habe, werde bestimmt auch schon in einem frühen Stadium mal einen Blick in die Ferne werfen - zum Beispiel um zu erkennen, dass die eine oder andere "einfache" Lösung sich später als unzureichend für die meisten Anwendungsfälle erweisen wird, und man sie daher gar nicht weiter verfolgen sollte.
Deutlich mehr Aufwand (aus Rechnersicht) ist, den Zähler in einer DB zu halten. Dort hast du dann auch den Vorteil, dass du dich um gleichzeitige Zugriffe nicht mehr kümmern musst; das kann die DB für dich sauber aufdröseln.
Wenn die einzige speicherrelevante Funktion ein Counter sein soll, wäre zb. MYSQl schon etwas überdimensioniert und natürlich auch nicht für die ersten Scripts eines Anfängers angedacht.
Ja, das sehe ich auch so. Ich wollte es trotzdem als "saubere" Methode mit erwähnt haben.
Ciao,
Martin
--
Lieber Hahn im Korb, als Tiger im Tank.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(