Arrays in Datei _binär_ speichern

ComFreek

Mod | @comfreek
Moderator
Hallo,

ich will Arrays in eine Datei binär speichern.
Ich kenne bisher nur die Funktionen serialize/unserialize, doch die speichern im Textformat, sodass man die Datei nur per Texteditor öffnen muss und schon sieht man das Array.

Zum Beispiel kann man in C++ aus die Speicheradresse von Variablen zugreifen, geht sowas auch in PHP?

Vielen Dank im Voraus!
 
Eventuell helfen dir da die Semaphore Funktionen. Ansonsten wäre ich da überfragt, da ich es so noch nie gebraucht habe...

Was für Daten möchtest du denn zwischenspeichern? Denn immerhin gibt es ja die Möglichkeit die Daten außerhalb des Documents Root zu lagern, so dass es keinen Zugriff von außen gibt. Falls du auch noch den Zugang von Innen ausgrenzen möchtest, wird das schwierig bis unmöglich... Höchstens mit einer Verschlüsselung mit Keyphrase, die eben nicht auf dem Server gelagert ist.
 
Erstmal Danke für deine Antwort.
Wenn ich das richtig verstanden habe, dann verschlüsseln die Semaphore Funktionen Verzeichnisse oder Archive ?

Felix Jacobi hat gesagt.:
Was für Daten möchtest du denn zwischenspeichern? Denn immerhin gibt es ja die Möglichkeit die Daten außerhalb des Documents Root zu lagern, so dass es keinen Zugriff von außen gibt. Falls du auch noch den Zugang von Innen ausgrenzen möchtest, wird das schwierig bis unmöglich... Höchstens mit einer Verschlüsselung mit Keyphrase, die eben nicht auf dem Server gelagert ist.

Ich habe mir schon überlegt, XML zu verwenden.
Aber binäre Daten können schneller eingelesen werden - wobei bei den heutigen Prozessoren und so macht das keinen großen Unterschied mehr (sind eher kleine Arrays).
Außerdem soll man sie nicht einfach so lesen können.

Aber wenn man die Daten verschlüsselt, dann müssen sie wieder entschlüsset werden ==> Zeit
Ich optimieren nämlich auf Zeit.

Falls jemand noch etwas einfällt, kann er ja antworten ;)
 
Wie wäre es denn, wenn du das array serialisiert in einer Variablen speicherst und diese dann binär in eine Datei schreibst?
 
Wie speichert man denn etwas in eine Datei binär? Bei fopen(...) gibt es ja keinen Parameter bzw. Flag "binär".

So weit komme ich:
PHP:
$MyArray = array("a"=>"apfel", 
                            "b"=>"birne",
                            "c"=>"Cocusnuss");

$MyArrayAsString = serialize($MyArray);

// $MyArrayAsString binär speichern, wie?

Edit: Ich habe die pack(...) Funktion gefunden. Bei den Kommentaren war folgender Code:
PHP:
public function unpack_str($str, $len)
{
  $tmp_arr = unpack("c".$len."chars", $str);
  $out_str = "";
  foreach($tmp_arr as $v)
  {
    if($v>0)
    {
      $out_str .= chr($v);
    }
  }
  return $out_str;
}
   
 public function pack_str($str, $len)
 {       
   $out_str = "";
   for($i=0; $i<$len; $i++)
   {
     $out_str .= pack("c", ord(substr($str, $i, 1)));
   }
   return $out_str;
 }
Den werde ich mal ausprobieren.

PS: Wieso gibt es im Forum zwei BB-Tags für PHP ([code=php][/code] und [code=php][/code])? Obwohl die erstere Variante besser ist, da da Verknüpfungen zur php.net Seite sind.
 
Zuletzt bearbeitet:
[phpf]fopen[/phpf] kennt den Schlussparameter "b" und [phpf]fwrite[/phpf] ist binary-safe.

Das eine ist wahrscheinlich ein Standardfeature während das andere eine GeSHi Variante o. ä. ist.
Die Wahl welches dir eher zusagt, bleibt dir überlassen ;)
 
@Felix Jacobi: Ich habe gerade meinen Beitrag editiert.
Ich hatte mir bei fopen nur die Tabelle durchgelesen, nicht die weiße Box ;)

Edit: Aber beide schreiben nur den serialisierten String in die Datei. Gibt es wirklich keine Variante, die binär schreibt? Wenn ich in C++ Arrays oder anderes in eine Datei speichere, sehe ich später - wenn ich die Datei im Textformat öffne - nur komische Zeichen.
 
Zuletzt bearbeitet:
Zurück