Hello,
Ich wollte fragen, wie man das hier am besten löst:
In einer PHP-Datei steht ein Array
$schmeckt={"Bier","Sekt","Wein"}
Das ist aber ein String, wenn das dort so drinsteht.
Wenn ein Array drinstehen würde, hätte ich es zumindest serialisiert.
Im Folgenden lasse ich die Fehlerkontrollen weg, weise aber darauf hin, dass diese
notwendig sind. Wenn man die Blöcke zu Funktionen vervollständigt kann man sie leicht
einbauen!
Erzeugen:
$_schmeckt = array{"Bier","Sekt","Wein"}; ## Array erzeugen
$stream = serialize($_schmeckt); ## Stream daraus machen
$fh = fopen($dateiname, 'w+'); ## Datei öffen
flock ($fh, LOCK_EX); ## Datei sperren
frite($fh, $stream); ## Datei schreiben
fclose($fh); ## Datei schließen und entsperren
Austauschen:
$fh1 = fopen($dateiname, 'a'); ## Datei erzeugen, falls nicht vorhanden
flock ($fh1, LOCK_SH); ## Datei mit Sperre gegen Schreibsperre belegen
$fh2 = fopen($dateiname, 'r+'); ## Datei zum Lesen und Schreiben öffnen
flock ($fh2, LOCK_SH); ## Ebenfalls Sperre gegen Schreibsperre setzen
fclose($fh1); ## ggf. neu erzeugte Datei frei geben (schließen)
flock ($fh2, LOCK_EX); ## Sperre auf Schreibsperre 'upgraden'
$fsize = filesize($dateiname); ## Dateigröße holen
$stream = fread($fh2, $fsize); ## Datei auslesen
$_schmeckt = unserialize($stream); ## Stream in Array zurückverwandeln
### Manipulationen am Array durchführen ## Hier das Array verändern
$stream = serialize($_schmeckt); ## Array wieder in Stream umwandeln
fseek($fh2, 0, SEEK_SET); ## Datensatzzeiger zurück auf Anfang
fwrite($fh2,$stream); ## verändertes Array wegschreiben
ftruncate($fh, strlen($strem)); ## Dateilänge anpassen auf veränderten Inhalt
fclose($fh); ## Datei schließen und freigeben.
Solange ein Dateihandle ein LOCK_SH hält, kann kein anderes ein LOCK_EX erhalten, aber beliebig viele sich zusätzlich auf das LOCK_SH aufschalten. LOCK_SH ist also eine Sperre gegen die Schreibsperre. Wenn ein Dateihandle als einziges ein LOCK_SH hält, kann es diese zum LOCK_EX (also zur vollwertigen Sperre) erweitern.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
