Peter Mairhofer: Binaer schreiben

Hi,

gibt es in PHP die Moeglichkeit, Daten einfach und schnell binär zu schreiben und wieder auszulesen?

Für eine Applikation hab' ich sehr komplexe Arrays in einer Session gespeichert. Davon möchte ich jetzt verschiedene in einer Datenbank speichern. Es kommt dabei nicht auf Ordnung an, sondern einfach nur darauf, dass die Daten ohne auswendige Verarbeitung einfach und schnell geschrieben/gelesen werden können.

In C täts da tolle Sachen wie

fwrite(my_array, 1, sizeof(my_array), f);
(...)

Gibts diese Möglichkeit?

Thx,

Peter

  1. Hallo,

    gibt es in PHP die Moeglichkeit, Daten einfach und schnell binär zu schreiben und wieder auszulesen?

    Ja. Es hängt davon ab, wie du den File öffnest. Wenn du bei mode ein "b" anhängst, wird der File binär gelesen / geschrieben.

    $handle = fopen( $file, "wb" ) or die("Fehler beim Öffnen");
    fwrite( $handle, $data, strlen( $data ));
    fclose( $handle );

    Mit freundlichen Grüßen,
    Michael Nagler

    1. Hello,

      Ja. Es hängt davon ab, wie du den File öffnest. Wenn du bei mode ein "b" anhängst, wird der File binär gelesen / geschrieben.

      Das ist nicht mehr richtig. In PHP wird genauso wie in C diese Möglichkeit nur aus Kompatibilitätsgründen vorgehalten. Wie Daten geschreiben oder gelesen werden, wird ausschließlich durch die benutzte Schreib-/Lese-Funktion bestimmt.

      fread() und fwrite() schreiben immer blockorientiert, was einem binären Schreiben entspreicht. fgets() liest Zeilenweise, was einem textorientierten Lesen entspricht. fputs() schreibt allerdings auch blockorientiert, also NICHT textorientiert, wie dies z.B. writeln() in Pascal tut.

      Grüße

      Tom

  2. Hello,

    nein, diese Möglichkeit gibt es in PHP (noch) nicht.
    Bei "Arrays" hätte das in PHP auch keinen Sinn, da es sich in Wirklichkeit nicht um Arrays oder Structs oder Records handlet, sondern um mehrdimensionale Bäume, bidirektional verkettet.

    Die liegen also im ganzen Speicher verstreut.

    Man kann nur die sehr leistungsfähige Funktion serialize() und ihr Pendant unserialize() bemühen. Die sind immer noch 1000mal schneller als jede Festplatte.

    Grüße

    Tom

    1. Moin!

      nein, diese Möglichkeit gibt es in PHP (noch) nicht.

      Ich habe sowas auch noch nicht vermißt.

      Man kann nur die sehr leistungsfähige Funktion serialize() und ihr Pendant unserialize() bemühen. Die sind immer noch 1000mal schneller als jede Festplatte.

      Die sind für dieses Vorhaben ausgezeichnet geeignet.

      - Sven Rautenberg

      --
      "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
      (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
      1. (...)

        Man kann nur die sehr leistungsfähige Funktion serialize() und ihr Pendant unserialize() bemühen. Die sind immer noch 1000mal schneller als jede Festplatte.

        Thank you very matsch.
        Genau nach sowas habe ich gesucht!

        Peter