Hi Tom
Das ist ja schon mal sehr aufschlussreich *g*
Ja, anders ist eben nicht "wie es alle machen"...
Hm, so langsam erkenne ich auch die Vorteile bei deiner Methode. Man kann halt ganz einfach auf alle Elemente zugreifen. Man muss im String nicht nach besonderen Zeichen suchen und diese umwandeln, man hat immer eine schöne Struktur.
Ich habe mir da jetzt auch mal das http://selfhtml.bitworks.de/speichern.php angesehen, was ja wohl hierzu passt, oder?
Ja, ein wenig schon. Da habe ich eine ähnliche Technik eingesetzt. Allerdings gibt es da nicht mehrere "Datensätze", sondern eben nur einen einzigen.
Aber darauf aufbauend lässt sich ja recht "einfach" ein Gästebuch schreiben. Und dazu wolltest du ja auch einen Future-Artikel schreiben.
Stellst du dir das als ein Array vor, in dem alle Einträge sind, oder für jeden Eintrag ein Array?
Man kann, wenn man nicht wieder Stress haben will, nur _ein_ Superarray aufbauen und nicht eines für jeden Datensatz, da man sonst ja wieder Probleme mit den Satzendezeichen bekommt. Ein CRLF (als Beispiel) könnte ja auch im Array wieder als Datenwert vorkommen.
Richtig, du würdest also empfehlen, ein Superarray aufzubauen?
Damit würde das ganze Array dann in einer Textdatei in einer Zeile stehen? Richtig?
Richtig. Da es sich ja nicht mehr um eine Textdatei handelt, sondern eine "formatfreie Binärdatei" (das Format ist nur implizit vorhanden und kann bei jedem update wechseln), gibt es keine "Zeilen".
Was ist denn eine "formatfreie Binärdatei"? Etwas, wo du irgendeine Dateiendung dranhängst? Meinst du das? Also nicht .txt, sonder zum Beispiel .dennis, ja?
Öffnen mit fopen(...,'a+') -> Zerstörungsfrei
Sperren mit flock()
Satzzeiger auf Anfang mit fseek()
Vollständig einlesen mit fread()
unserialize()
Ich persöhnlich würde erst kurz vor dem Schreiben flock() machen.
Dann ist es kürzer gesperrt, beim Lesen können die sich doch nicht in die Quere kommen, oder?
Änderungen vornehmen im Array() <<== darum geht es dabei nur!
Das ist nämlich bequem.
_Sehr_ bequem!
serialize()
Satzzeiger auf Anfang mit fseek()
schreiben mit fwrite()
Trimmen mit ftruncate()
Schließen mit fclose(), das flock(...,LOCK_UN) kann man sich schenken.
Hm, kleine Frage: Was, wenn das neue Array nun kürzer ist als das alte. Bei deiner Methode mit fseek() und fwrite(), würde dann da am Ende nicht der Rest des alten, längeren Arrays stehen bleiben?
Warum nicht den File vorher schließen, eneut öffnen und zwar mit der Fuktion, das die dateilänge auf 0 Bytes gesetzt wird (das war glaube ich "w")?
Der oben beschriebene Vorgang dauert selbst bei 2MB großen Dateien mit ca. 1000 Datensätzen nicht länger als 1sec, es sei denn, Du hast den Apachen auf nem 386er mit 8MB installiert *gg*.
Ich glaube die Dinger existierten noch vor meiner Zeit ;-)
Hey, da hätt ich doch sogar noch meinen Spaß dran :-)
Schön. Denn da müssen wir ja alle Methoden vorstellen, auch wenn sie eigentlich nur von Harry benutzt werden *zyn,zyn*.
Prima. Was macht denn ein Co-Autor so genau? Bzw. was stellst du dir unter dem Tun eines Co-Autors vor?
Wenn du willst könnte ich ja so ein bisschen Texte schreiben, bezüglich Vor- und Nachteile der verschiedenen Methoden.
Aber vielleicht sollten wir da mal per E-Mail drüber reden; Hier meine E-Mail:
webmaster | at | riehle-web.com
Vielleicht fehlt noch ein bisschen über das eigentliche Wirken von SafeMode - was kann zum Beispiel passieren, wenn dieser nicht aktiviert ist etc.
Siehst Du, da haben wir doch den Nutzen eines Co-Autors schon. So muss das dann auch bei den Dateien laufen.
du musst dir im Prinzip überlegen, wenn du damit ansprechen willst: Die Leute, die schon Halb-Profis sind, und denen du nur noch etwas über SafeMode beibringen willst, oder die, die nicht wissen was SafeMode ist, die es außer mal im Forum noch nie gehört haben, aber wissbegierig sind es zu erfahren.
Wenn ich mir halt vorstelle, ich käme da an und ich wüsste gar nichts von SafeMode (ich weiß ja auch so nicht viel davon ;-) ), würde ich glaube ich danach nicht viel mehr verstehen.
Das ist das, wo ich meinte, da fehlt eventuell noch eine kleine Einleitung.
Ich hatt ja so eine Struktur schon angedeutet. Übrigens könnte nun die Frage kommen, ob man die Arrays assoziativ oder indiziert aufbauen sollte.
Wo lag da jetzt noch mal der Unterschied im Detail?
Angesichts der Vorteile beim Zugriff über Namen und der monströsen Hauptspeicher und Festplatten plädiedre ich für assoziative Arrays. Wenn nämlich in einem Datensatz ein Teilobjekt nicht vorkommt, kostet es auch keinen Platz. Man muss nun nur seine Bearbeitungsfunktionen so erziehen, dass die eben immer vorher gucken... muss ich nun ein Bild anzeigen oder keins oder fünf Foreach() machts möglich.
Du meinst, man sollte möglichst wenig in die Dateien speichern? Also zum Beispiel kein html Code, für Links, weil man ihn nacher noch dazufügen kann. Ebenso für Bilder. (?)
Nun will ich aber hier nicht das ganze Script in ein Posting schreiben. Ich hoffe aber, dass Du es mit Ikea halten kannst jetzt: "Entdecke die Möglichkeiten"
I'll try!
MfG, Dennis.
Machen wir doch mal zur Feier des Tages keine Signatur *g*