Hello Rolf,
Nur ein Beispiel zum Serialisieren vorzeichenbehafteter Integer (7 Bit):
$binary = pack("c*", -3, 5, -12, -24, 33);
print_r( unpack("c*", $binary) );
Array
(
[1] => -3
[2] => 5
[3] => -12
[4] => -24
[5] => 33
)
$binary ist das was in der Datei steht. Größere Zahlen=> Andere Schablone, siehe Doku. Und wie es in der Datei innendrinnen aussieht, ist völlig uninteressant.
Nun bring den armen Mathefritz bitte nicht ganz durcheinander!
Das was Du jetzt zeigst, nennt sich "Daten packen", oder "Daten in Strukturen anordnen", warum die PHP-Funktion nicht umsonst pack()
heißt. Man kann hier Aahlfrei auf die Datenwerte zugreifen.
Unter "Serialisierung" versteht man gemeinhin, dass Daten hintereinanderweg angeordnet werden, unabhägig welche aktuelle Länge (welchen Speicherbedarf) sie einnehmen. Die einzelnen Werte können beim einen Mal eine andere Länge haben, als beim anderen. Darum kann man nicht wahlfrei auf sie zugreifen, sondern muss die ganze Serie der Daten einlesen, bis das entprechende Feld im Stream "vorbeikommt". Entsprechend muss ein Kriterium (Zeichen) geben, das die Datenfelder voneinander trennt.
PHP bietet dafür serialize() und unserialize().
Die Daten aus einem Array serialisiert in eine Datei zu schreiben, ist recht einfach:
<?php
header('Content-Type: text/plain; CharSet=utf-8');
$_data = array();
$_data['person']['fname'] = 'Klaus';
$_data['person']['lname'] = 'Köhler';
$_data['adddress']['street'] = 'Kartoffelacker';
$_data['adddress']['houseno'] = 19;
$_data['adddress']['zipcode'] = '08124';
$_data['adddress']['city'] = 'Knolzstedt';
print_r($_data);
$streamout = serialize($_data);
file_put_contents('daten.dat', $streamout);
$streamin = file_get_contents('daten.dat');
$_data = false;
$_data = unserialize($streamin);
print_r($_data);
var_dump($_data);
?>
Das kleine Testscript sollte Mathefritz verdeutlichen, wie einfach es ist, die Daten zu serialisieren und sie wiederzuholen.
Zu beachten ist auf jeden Fall der weitere Umgang mit den Strings, die auf den ersten Blick wie Zahlen aussehen $_data['adddress']['zipcode'] = '08124';
und mit eriner führenden 0 beginnen. Sowohl die Array-Zuweisung, als auch serialize können damit umgehen. Spannend ist nur, ob der Programmierer auch im weiteren Script damit umgehen kann, damit die führende Null nicht verschwindet.
Allerdings muss ich hier auch betonen, dass das nur ein Testscript ist, um "mal eben schnell" Daten zu serialisieren. Wenn es in den produktiven Betrieb geht, muss man das eventuelle Schonvorhandensein der Datei beim Wegschreiben und das eventuelle Nichtvorhandensein beim Holen berücksichtigen, sowie den konkurrierenden Betrieb. Das musste Mathefritz aber auch schon bei seinen bisherigen Versuchen.
Liebe Grüße
Tom S.
--
Die Krawatte ist das Kopftuch des Westens