Hello,
fseek($fp,0,SEEK_SET);
ftruncate($fp,0);
fwrite($fp,$string_packed_neu,strlen($string_packed_neu));fclose($fp);
Saubere Lösung. Spart ein Statement und eine Dateioperation.
[...] Fehler bei meiner Variante [...]Mit anderen Worten: Diese Lösung ist durchaus ok und kann als einwandfrei funktionierend angesehen werden.
Mit dem fseek() vor dem truncate ja.
Sag mal, stören in so einem Ding eigentlich Zeilenumbrüche? Also ich meine in dem Abgespeicherten?
Und " bzw. ' solle man doch auf jeden Fall vorher umwandeln, oder?
Nein eben nicht, da die Daten streng serialisiert werden.
Aber man deshalb die Datei immer nur vollständig auslesen und mus immer das gesamte Array, bestend aus den Metadaten UND den Datensätzen serialisieren/deserialisieren.
Nun zur Ausgabe:
Das müsste mit einer einfache For-Schleife einwandfrei gehen. Und wenn ich für die index.php nur die beiden neuesten News haben will, schaue ich einfach die höchste vergebene ID nach und gebe diese und diese -1 aus.
Nimm nicht for() sondern foreach() und break;
Oder schau Dir die Funktionen reset(), next(), prex(), pos(), end() usw. an. Da kannst Du dann eine nicht dedizierte Schleife (mit while()) aufbauen. Es gibt nur noch ein Problem: Wie stellt man den Zeiger eines Arrays exact auf einen bekannten Key?
Das muss ich nochmal überprüfen.
Prima wäre es da natürlich, wenn einem Crown Jobs zur Verfügng stünden, da könnte man immer ein "Archivierungs Script" z.B. Mitternachts aufrufen und fertig.
Speicher doch einfach in [Meta][lastsave] den letzten Savelauf ab. Bei jedem Aufruf lässt Du einfach prüfen, wann das letzte Mal wieviele Sätze abgetrennt wurden. Wenn dann vier Wochen lang kein Aufruf erfolgte, hat sich an der Sicherung doch auch nix geändert. Oder Du machst das einfach vom Überlaufen abhängig. Immer wenn 105 Sätze erreicht sind, werden die 5 ältesten abgetrennt und weggesichert - oder so ähnlich.
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau