David: base64_encode & serialize <---> unserialize & base64_decode

Hallo,

um bei einem assoziativen Array Sonderzeichen im Text zu erhalten, lasse ich mein Array folgendermaßen
in eine Textdatei schreiben:

function Datei_schreiben ($Inhalt)
      {
         file_put_contents ("Mitglieder.txt", base64_encode (serialize ($Inhalt)));
      }

Um auf das Array wieder zugreifen zu können, lese ich die Datei wie folgt wieder ein:

function Datei_einlesen ($Dateiname)
      {
         return file_get_contents (unserialize (base64_decode ($Dateiname)));
      }

Wenn ich dann auf das Array über eine Schleife zugreifen und die Inhalte ausgeben will, wird mir im
Browserfenster nichts angezeigt, ebensowenig eine Fehlermeldung.

Nachdem ich aber beim Einlesen der Datei die umgekehrte Reihenfolge der Befehle wie beim Schreiben
verwendet habe, müsste es aber doch eigentlich funktionieren, oder?

Aber leider tut es das nicht.

Die Übergabe des Arrays (für die erste Funktion) bzw. des Dateinamens (für die zweite Funktion) sind
richtig, da mir die Inhalte, wenn ich sie ohne base64_encode und serialze abspeichere, angezeigt werden.

Vielen Dank für Eure Mithilfe.

David

  1. Hallo,

    file_put_contents ("Mitglieder.txt", base64_encode (serialize ($Inhalt)));
             return file_get_contents (unserialize (base64_decode ($Dateiname)));

    fällt dir nichts auf, wenn du diese beiden Zeilen vergleichst?
    Du musst die Reihenfolge der Verschachtelung schon exakt umkehren!

    Beim Schreiben hast du:
     1. serialize()
     2. base64_encode()
     3. file_put_contents()

    Beim Lesen dagegen:
     1. base64_decode($Filename)
     2. unserialize()
     3. file_get_contents()

    Was immer du da als Argument an file_get_contents() übergibst - es ist so ziemlich alles, nur kein gültiger Dateiname.

    Wenn ich dann auf das Array über eine Schleife zugreifen und die Inhalte ausgeben will, wird mir im Browserfenster nichts angezeigt, ebensowenig eine Fehlermeldung.

    Tatsächlich? Dann unterdrückst du anscheinend sämtliche Fehlermeldungen, denn file_get_contents() müsste dir zumindest sagen, dass die angegebene Datei nicht existiert.

    Nachdem ich aber beim Einlesen der Datei die umgekehrte Reihenfolge der Befehle wie beim Schreiben verwendet habe, müsste es aber doch eigentlich funktionieren, oder?

    Wenn du das wirklich getan hättest, ja. ;-)

    So long,
     Martin

    --
    Ich bin im Prüfungsstress, ich darf Scheiße sagen.
      (Hopsel)
    1. Hallo Martin,

      wollte die Sache wohl zu sehr zusammenfassen :-;

      Über folgenden Code klappt es:

      function Datei_einlesen ($Dateiname)
            {
               $Inhalt = file_get_contents ($Dateiname);
               $Inhalt = unserialize (base64_decode ($Inhalt));

      return $Inhalt;
            }

      Danke für Deinen Denkanstoß :-)

      David

      1. Hallo David,

        wollte die Sache wohl zu sehr zusammenfassen :-;

        dagegen spricht nichts, solange man den Überblick behält.

        function Datei_einlesen ($Dateiname)
              {
                 $Inhalt = file_get_contents ($Dateiname);
                 $Inhalt = unserialize (base64_decode ($Inhalt));

        return $Inhalt;
              }

        Die verkürzte Form wäre auch kein Problem:

        return (unserialize(base64_decode(file_get_contents($Dateiname))));

        Wie gesagt: Die Reihenfolge der Schachtelung muss stimmen, dann ist eine kompakte Implementierung gar nicht schwer. ;-)

        Danke für Deinen Denkanstoß :-)

        Gern geschehen.

        Pfrohe Pfingsten,
         Martin

        --
        Wer im Steinhaus sitzt, soll nicht mit Gläsern werfen.
        1. Danke, Martin, wünsche ich Dir auch :-)

          David