Verwendung von php serialize() und unserialize()

Lesezeit: 8 Minuten

Verwendung von php serialize und unserialize
Istiaque Ahmed

Mein Problem ist sehr grundlegend.

Ich habe kein Beispiel gefunden, das meine Anforderungen erfüllt, was genau serialize() und unserialize() meinst du in php? Sie geben nur ein Beispiel – serialisieren Sie ein Array und zeigen Sie eine Ausgabe in einem unerklärlichen Format. Es ist wirklich schwer, das Grundkonzept zu verstehen, das durch ihren Jargon geht.

BEARBEITEN:

<?php

$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);

?>

Ausgang:

Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

Die zweite Ausgabe kann ich nicht nachvollziehen. Kann jemand außerdem ein Beispiel für eine Situation geben, in der ich ein PHP-Array serialisieren muss, bevor ich es verwende?

  • Falls Sie immer noch neugierig auf die “sekundäre Ausgabe” waren, ist es ziemlich einfach: a = Array, 3 = drei Elemente der Größe innerhalb der {}. darin haben Sie i=integer/index gleich 1, String von len 6 gleich “elem 1”, integer gleich 2.. etc etc.. Es ist ziemlich klar, wenn Sie es so lesen. Sie können sich vorstellen, dass mehrere Ebenen von Arrays/Objekten leicht darin enthalten sind, jedoch ist eine Änderung sehr unklug. Sie sollten die Änderung wirklich deserialisieren und dann serialisieren, um die Konsistenz sicherzustellen.

    – Grizzly

    5. Februar 2015 um 2:48 Uhr

  • @IstiaqueAhmed, bezüglich “Kann jemand ein Beispiel für eine Situation geben, in der ich ein PHP-Array serialisieren muss, bevor ich es verwende?”gibt es ein solches Beispiel unter stackoverflow.com/a/30436890/632951

    – Schrittmacher

    25. Mai 2015 um 11:11 Uhr

  • @grizly danke Mann, ich habe zwei Jahre lang nach einer solchen Antwort gesucht, ich wusste weder, wie ich es erklären soll, noch, wie ich den Grund für die Verwendung dieser Funktion zuordnen soll, danke für die Antwort

    – isaacewing

    5. Juni 2017 um 3:10 Uhr

Verwendung von php serialize und unserialize
verzeihen

Ein PHP-Array oder -Objekt oder etwas anderes komplexe Datenstruktur darf außerhalb von a nicht transportiert, gelagert oder anderweitig verwendet werden Ausführen von PHP-Skript. Wenn du möchtest fortdauern eine so komplexe Datenstruktur über einen einzelnen Lauf eines Skripts hinaus, müssen Sie serialisieren es. Das bedeutet nur, die Struktur auf einen “kleineren gemeinsamen Nenner” zu bringen, der von anderen Dingen als PHP gehandhabt werden kann, wie Datenbanken, Textdateien, Sockets. Die Standard-PHP-Funktion serialize ist nur ein Format Um so etwas auszudrücken, wird eine Datenstruktur in eine String-Darstellung serialisiert, die für PHP einzigartig ist und mit in ein PHP-Objekt umgewandelt werden kann unserialize. Es gibt jedoch viele andere Formate wie JSON oder XML.


Nehmen wir zum Beispiel dieses häufige Problem:

Wie übergebe ich eine PHP Reihe zu Javascript?

PHP und Javascript können nur über Strings kommunizieren. Sie können die Zeichenfolge übergeben "foo" sehr einfach zu Javascript. Sie können die Nummer weitergeben 1 sehr einfach zu Javascript. Sie können die booleschen Werte übergeben true und false einfach zu Javascript. Aber wie übergibt man dieses Array an Javascript?

Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

Die Antwort ist Serialisierung. Im Falle von PHP/Javascript ist JSON eigentlich das bessere Serialisierungsformat:

{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }

Javascript kann dies leicht in ein tatsächliches Javascript-Array umkehren.

Dies ist jedoch eine ebenso gültige Darstellung derselben Datenstruktur:

a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

Aber so ziemlich nur PHP verwendet es, es gibt sonst wenig Unterstützung für dieses Format.
Dies ist jedoch sehr verbreitet und wird auch gut unterstützt:

<array>
    <element key='1'>elem 1</element>
    <element key='2'>elem 2</element>
    <element key='3'>elem 3</element>
</array>

Es gibt viele Situationen, in denen Sie passen müssen komplexe Datenstrukturen herum als Saiten. Die Serialisierung, die beliebige Datenstrukturen als Zeichenfolgen darstellt, löst dies.

  • Ihre Erklärung scheint sich dem zu nähern, was ich erwartet hatte. kannst du dir bitte meine Bearbeitung ansehen?

    – Istiaque Ahmed

    27. Dezember 2011 um 7:05 Uhr

  • Was ist die Erklärung für diese a,i,s usw. in a:3:{i:1;s:6:”elem 1″;i:2;s:6:”elem 2″;i:3;s: 7:” elem 3″;} ? Und wenn es Ihnen nichts ausmacht, ein Beispiel für die Serialisierung des Arrays (möglicherweise nicht relevant für das Thema dieses Beitrags), um es an js zu senden.

    – Istiaque Ahmed

    27. Dezember 2011 um 7:39 Uhr

  • Soweit ich weiß, gibt es kaum eine formale Spezifikation dieses Formats, aber Sie können es sich denken, nicht wahr? i:1 = Ganzzahl 1, s:6:"elem 1" = Zeichenfolge mit 6 Zeichen “elem 1” … Und nach welchem ​​​​Beispiel fragen Sie, ich dachte, ich hätte eines gegeben?

    – verzeihen

    27. Dezember 2011 um 7:44 Uhr


  • ” Aber wie übergeben Sie dieses Array an Javascript? Array ( [1] => Element 1 [2] => Element 2 [3] => elem 3 ) “… nur das genaue Code-Snippet dafür

    – Istiaque Ahmed

    27. Dezember 2011 um 7:49 Uhr

  • echo json_encode($array); Wie exakt Sie passieren es kommt auf die Umstände an. Hängen Sie sich nicht zu sehr daran auf.

    – verzeihen

    27. Dezember 2011 um 7:57 Uhr


Verwendung von PHP serialize() unserialize()

http://freeonlinetools24.com/serialize

echo '<pre>';
// say you have an array something like this 
$multidimentional_array= array(
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 4, 7) 
       ),
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 5, 7) 
       ),
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 8, 7) 
    )
);

// serialize 
$serialized_array=serialize($multidimentional_array);
print_r($serialized_array);

Was Ihnen eine Ausgabe wie diese gibt

a:3:{i:0;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:4;i:2;i:7;}}i:1;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:5;i:2;i:7;}}i:2;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:8;i:2;i:7;}}}

Wenn Sie das ursprüngliche Array wiederherstellen möchten, verwenden Sie einfach die PHP-Funktion unserialize()

$original_array=unserialize($serialized_array);
var_export($original_array);

Ich hoffe, das wird helfen

Verwendung von php serialize und unserialize
Manikandan

<?php
$a= array("1","2","3");
print_r($a);
$b=serialize($a);
echo $b;
$c=unserialize($b);
print_r($c);

Führen Sie dieses Programm aus, um die Ausgabe wiederzugeben

a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}


Hier
a=Größe des Arrays
i=Zählung der Array-Nummer
s=Größe der Array-Werte

Sie können serialize verwenden, um ein Array von Daten in der Datenbank zu speichern
und kann Daten zur Verwendung abrufen und UN-serialisieren.

Wenn Sie Ihren PHP-Wert speicherbar machen wollen, müssen Sie ihn in einen String-Wert umwandeln, das ist was serialisieren() tut. Und deserialisieren() macht das Gegenteil.

Die meisten Speichermedien können speichern Schnur Typen. Sie können eine PHP-Datenstruktur wie ein Array oder ein Objekt nicht direkt speichern und sollten es auch nicht, da dies den Datenträger mit PHP koppeln würde.

Stattdessen, serialize() ermöglicht es Ihnen, eine dieser Strukturen als Zeichenfolge zu speichern. Es kann von seiner Zeichenfolgendarstellung mit deserialisiert werden unserialize().

Wenn Sie sich auskennen json_encode() und json_decode() (und JSON im Allgemeinen) ist das Konzept ähnlich.

  • vertraut mit json. noch Unklarheit in der PHP-Sache. habe meinen Beitrag bearbeitet

    – Istiaque Ahmed

    27. Dezember 2011 um 7:06 Uhr

  • Warum muss man serialisieren, wenn es einen json_encode gibt? Bitte erklären Sie, wenn Sie es wissen. Danke.

    – Jewgenij Afanasjew

    3. August 2017 um 0:02 Uhr

  • @YevgeniyAfanasyev Vielleicht nicht für einige Teilmengen von Daten. Aber ich denke serialize() älter als JSON.

    – Alex

    18. August 2017 um 8:20 Uhr

1646977450 544 Verwendung von php serialize und unserialize
Chintogotoch

Bitte! bitte! bitte! Daten NICHT serialisieren und in Ihre Datenbank stellen. Serialize kann auf diese Weise verwendet werden, aber das verfehlt den Sinn einer relationalen Datenbank und der Datentypen, die Ihrer Datenbank-Engine innewohnen. Dadurch werden Daten in Ihrer Datenbank nicht portierbar, schwer lesbar und können Abfragen erschweren. Wenn Sie möchten, dass Ihre Anwendung in andere Sprachen portierbar ist, wie zum Beispiel, wenn Sie feststellen, dass Sie Java für einen Teil Ihrer App verwenden möchten, in dem es sinnvoll ist, Java zu verwenden, wird die Serialisierung zu einem Ärgernis. Sie sollten immer in der Lage sein, Daten in der Datenbank abzufragen und zu ändern, ohne ein zwischengeschaltetes Tool eines Drittanbieters zu verwenden, um die einzufügenden Daten zu manipulieren.

Es macht es wirklich schwierig, Code, Code mit Portabilitätsproblemen und Daten zu warten, die schwieriger auf andere RDMS-Systeme, neue Schemata usw die Felder, die Sie serialisiert haben.

Das heißt nicht, dass serialize() nutzlos ist. Es ist nicht … Ein guter Ort, um es zu verwenden, kann beispielsweise eine Cache-Datei sein, die das Ergebnis einer datenintensiven Operation enthält. Es gibt unzählige andere … Missbrauchen Sie die Serialisierung nur nicht, denn der nächste Typ, der vorbeikommt, wird einen Wartungs- oder Migrationsalptraum haben.

Ein gutes Beispiel für serialize() und unserialize() könnte so aussehen:

$posts = base64_encode(serialize($_POST));
header("Location: $_SERVER[REQUEST_URI]?x=$posts");

Desialize auf der Seite

if($_GET['x']) {
   // unpack serialize and encoded URL
   $_POST = unserialize(base64_decode($_GET['x']));
}

  • vertraut mit json. noch Unklarheit in der PHP-Sache. habe meinen Beitrag bearbeitet

    – Istiaque Ahmed

    27. Dezember 2011 um 7:06 Uhr

  • Warum muss man serialisieren, wenn es einen json_encode gibt? Bitte erklären Sie, wenn Sie es wissen. Danke.

    – Jewgenij Afanasjew

    3. August 2017 um 0:02 Uhr

  • @YevgeniyAfanasyev Vielleicht nicht für einige Teilmengen von Daten. Aber ich denke serialize() älter als JSON.

    – Alex

    18. August 2017 um 8:20 Uhr

1646977450 682 Verwendung von php serialize und unserialize
MrGlass

Von http://php.net/manual/en/function.serialize.php :

Erzeugt eine speicherbare Darstellung eines Werts. Dies ist nützlich, um PHP-Werte zu speichern oder weiterzugeben, ohne deren Typ und Struktur zu verlieren.

Im Wesentlichen nimmt es ein PHP-Array oder -Objekt und wandelt es in einen String um (den Sie dann nach Belieben übertragen oder speichern können).

Unserialize wird verwendet, um die Zeichenfolge zurück in ein Objekt zu konvertieren.

  • Was ist die Erklärung für “speicherbare Darstellung”?

    – Istiaque Ahmed

    27. Dezember 2011 um 6:50 Uhr

  • Ich habe nur gesehen, dass serialize verwendet wurde, wenn jemand ein PHP-Array nehmen und es in einer Datenbank speichern wollte. Sie können die Ausgabe serialisieren, in einem standardmäßigen Zeichenfolgenfeld in Ihrer Datenbank speichern und sie dann abrufen und deserialisieren, wenn Sie sie erneut verwenden möchten.

    – MrGlass

    27. Dezember 2011 um 12:52 Uhr

990010cookie-checkVerwendung von php serialize() und unserialize()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy