<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.var.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'function.unserialize.php',
    1 => 'unserialize',
    2 => 'Erzeugt aus einem gespeicherten Datenformat einen Wert in PHP',
  ),
  'up' => 
  array (
    0 => 'ref.var.php',
    1 => 'Funktionen zur Behandlung von Variablen',
  ),
  'prev' => 
  array (
    0 => 'function.strval.php',
    1 => 'strval',
  ),
  'next' => 
  array (
    0 => 'function.unset.php',
    1 => 'unset',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/var/functions/unserialize.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.unserialize" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">unserialize</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">unserialize</span> &mdash; <span class="dc-title">Erzeugt aus einem gespeicherten Datenformat einen Wert in PHP</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.unserialize-description">
  <h3 class="title">Beschreibung</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>unserialize</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$data</code></span>, <span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$options</code><span class="initializer"> = []</span></span>): <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span></div>

  <p class="simpara">
   <span class="function"><strong>unserialize()</strong></span> nimmt eine einzelne Variable aus einer
   serialisierten Datenmenge und wandelt sie in einen PHP-Wert zurück.
  </p>
  <div class="warning"><strong class="warning">Warnung</strong>
   <p class="para">
    Unvertrauenswürdige Benutzereingaben sollten nicht an
    <span class="function"><strong>unserialize()</strong></span> übergeben werden, unabhängig vom
    <code class="parameter">options</code>-Wert von
    <code class="literal">allowed_classes</code>. Die Deserialisierung kann durch
    Objektinstanziierung und Autoloading dazu führen, dass Code geladen und
    ausgeführt wird, und ein böswilliger Anwender kann in der Lage sein, das
    auszunutzen. Es ist ein sicheres, standardisiertes Austauschformat wie JSON
    (per <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span> und <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span>)
    zu verwenden, wenn serialisierte Daten an den Nutzer übergeben werden müssen.
   </p>
   <p class="para">
    Müssen extern gespeicherte serialisierte Daten deserialisiert werden, ist zu
    erwägen <span class="function"><a href="function.hash-hmac.php" class="function">hash_hmac()</a></span> zur Datenvalidierung zu verwenden. Es
    ist sicherzustellen, dass die Daten von niemandem außer einem selbst
    modifiziert wurden.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.unserialize-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">data</code></dt>
     <dd>
      <p class="para">
       Der serialisierte String.
      </p>
      <p class="para">
       Wenn die zu deserialisierende Variable ein Objekt ist, wird PHP nach der
       erfolgreichen Wiederherstellung des Objekts automatisch versuchen, die
       <a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a>- oder
       <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup</a>-Methode
       aufzurufen (sofern eine von diesen existiert).
      </p>
      <p class="para">
       <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
        <strong>Die Direktive <a href="var.configuration.php#ini.unserialize-callback-func" class="link">unserialize_callback_func</a></strong><br />
        <p class="para">
         Der in der Direktive
         <a href="var.configuration.php#ini.unserialize-callback-func" class="link">unserialize_callback_func</a>
         angegebene Callback wird aufgerufen, wenn eine undefinierte Klasse
         deserialisiert wird. Wenn kein Callback angegeben wird, wird das
         Objekt als <span class="classname"><a href="class.php-incomplete-class.php" class="classname">__PHP_Incomplete_Class</a></span> instanziiert.
        </p>
       </p></blockquote>
      </p>
     </dd>
    
    
     <dt><code class="parameter">options</code></dt>
     <dd>
      <p class="para">
       Optionen, die <span class="function"><strong>unserialize()</strong></span> als assoziatives Array
       zur Verfügung gestellt werden sollen.
      </p>
      <table class="doctable table">
       <caption><strong>Gültige Optionen</strong></caption>
       
        <thead>
         <tr>
          <th>Name</th>
          <th>Typ</th>
          <th>Beschreibung</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td><code class="literal">allowed_classes</code></td>
          <td><span class="type"><span class="type"><a href="language.types.array.php" class="type array">array</a></span>|<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></span></td>
          <td>
           <span class="simpara">
            Entweder ein <a href="language.types.array.php" class="link">Array</a> von Klassennamen, die akzeptiert werden
            sollen, oder <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> um keine Klassen oder <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> um alle Klassen
            zu akzeptieren. Ist diese Option angegeben und
            <span class="function"><strong>unserialize()</strong></span> trifft auf ein Objekt einer
            Klasse, die nicht akzeptierbar ist, wird das Objekt statt dessen
            als <span class="classname"><a href="class.php-incomplete-class.php" class="classname">__PHP_Incomplete_Class</a></span> instanziiert.
           </span>
           <span class="simpara">
            Das Auslassen dieser Option hat die gleiche Wirkung wie sie als
            <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> anzugeben: PHP wird versuchen Objekte beliebiger Klassen zu
            instanziieren.
           </span>
          </td>
         </tr>

         <tr>
          <td><code class="literal">max_depth</code></td>
          <td><span class="type"><a href="language.types.integer.php" class="type int">int</a></span></td>
          <td>
           <span class="simpara">
            Die maximale Tiefe von Strukturen, die während der
            Deserialisierung erlaubt ist. Diese Option soll Stack-Überläufe
            verhindern. Die Standardtiefe ist <code class="literal">4096</code> und kann
            durch Setzen von <code class="literal">max_depth</code> auf
            <code class="literal">0</code> deaktiviert werden.
           </span>
          </td>
         </tr>

        </tbody>
       
      </table>

     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.unserialize-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="para">
   Der konvertierte Wert wird zurückgegeben und kann vom Typ
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, <span class="type"><a href="language.types.float.php" class="type float">float</a></span>,
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, <span class="type"><a href="language.types.array.php" class="type array">array</a></span> oder <span class="type"><a href="language.types.object.php" class="type object">object</a></span> sein.
  </p>
  <p class="para">
   Falls der übergebene String nicht deserialisierbar ist, wird <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
   zurückgegeben und <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> produziert.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-function.unserialize-errors">
  <h3 class="title">Fehler/Exceptions</h3>
  <p class="simpara">
   Objekte können <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span>s in ihren
   Deserialisierungs-Routinen ausführen.
  </p>
  <p class="simpara">
   Wenn das Element <code class="literal">allowed_classes</code> von
   <code class="parameter">options</code> kein <span class="type"><a href="language.types.array.php" class="type array">array</a></span> von Klassennamen ist,
   löst <span class="function"><strong>unserialize()</strong></span> seit PHP 8.4.0
   <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>s und
   <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>s aus.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.unserialize-changelog">
  <h3 class="title">Changelog</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Version</th>
       <th>Beschreibung</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.4.0</td>
       <td>
        Löst nun <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>s und
        <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>s aus, wenn das Element
        <code class="literal">allowed_classes</code> von <code class="parameter">options</code>
        kein <span class="type"><a href="language.types.array.php" class="type array">array</a></span> von Klassennamen ist.
       </td>
      </tr>

      <tr>
       <td>8.3.0</td>
       <td>
        Gibt nun ein <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> aus, wenn die
        Eingabezeichenkette nicht verwendete Daten enthält.
       </td>
      </tr>

      <tr>
       <td>8.3.0</td>
       <td>
        Gibt nun einen Fehler der Stufe <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> aus,
        wenn der übergebene String nicht unserialisierbar ist; zuvor wurde ein
        <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> ausgegeben.
       </td>
      </tr>

      <tr>
       <td>7.4.0</td>
       <td>
        Zu <code class="parameter">options</code> wurde das Element
        <code class="literal">max_depth</code> hinzugefügt, um die maximale Tiefe von
        Strukturen festzulegen, die während der Deserialisierung erlaubt ist.
       </td>
      </tr>

      <tr>
       <td>7.1.0</td>
       <td>
        Das <code class="literal">allowed_classes</code>-Element von
        <code class="parameter">options</code> ist nun strikt typisiert, d. h. wird
        etwas anderes als ein <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span> oder ein <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
        übergeben, liefert <span class="function"><strong>unserialize()</strong></span> <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück und
        löst ein <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> aus.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.unserialize-examples">
  <h3 class="title">Beispiele</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 <span class="function"><strong>unserialize()</strong></span>-Beispiel</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Als Beispiel benutzen wir unserialize(), um Daten aus einer Datenbank in das<br />// $session_data-Array zu laden. Das Beispiel vervollständigt das unter<br />// serialize() beschriebene.<br /><br /></span><span style="color: #0000BB">$conn </span><span style="color: #007700">= </span><span style="color: #0000BB">odbc_connect</span><span style="color: #007700">(</span><span style="color: #DD0000">"webdb"</span><span style="color: #007700">, </span><span style="color: #DD0000">"php"</span><span style="color: #007700">, </span><span style="color: #DD0000">"chicken"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$stmt </span><span style="color: #007700">= </span><span style="color: #0000BB">odbc_prepare</span><span style="color: #007700">(</span><span style="color: #0000BB">$conn</span><span style="color: #007700">, </span><span style="color: #DD0000">"SELECT data FROM sessions WHERE id = ?"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$sqldata </span><span style="color: #007700">= array(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_USER'</span><span style="color: #007700">]);<br />if (!</span><span style="color: #0000BB">odbc_execute</span><span style="color: #007700">(</span><span style="color: #0000BB">$stmt</span><span style="color: #007700">, </span><span style="color: #0000BB">$sqldata</span><span style="color: #007700">) || !</span><span style="color: #0000BB">odbc_fetch_into</span><span style="color: #007700">(</span><span style="color: #0000BB">$stmt</span><span style="color: #007700">, </span><span style="color: #0000BB">$tmp</span><span style="color: #007700">)) {<br />    </span><span style="color: #FF8000">// wenn execute oder fetch fehlschlägt, initialisiere ein leeres Array<br />    </span><span style="color: #0000BB">$session_data </span><span style="color: #007700">= array();<br />} else {<br />    </span><span style="color: #FF8000">// die serialisierten Daten sollten nun in $tmp[0] stehen.<br />    </span><span style="color: #0000BB">$session_data </span><span style="color: #007700">= </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />    if (!</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$session_data</span><span style="color: #007700">)) {<br />        </span><span style="color: #FF8000">// etwas ging schief, also wieder ein leeres Array initialisieren<br />        </span><span style="color: #0000BB">$session_data </span><span style="color: #007700">= array();<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Beispiel #2 unserialize_callback_func-Beispiel</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$serialized_object</span><span style="color: #007700">=</span><span style="color: #DD0000">'O:1:"a":1:{s:5:"value";s:3:"100";}'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'unserialize_callback_func'</span><span style="color: #007700">, </span><span style="color: #DD0000">'mycallback'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Festlegen der callback_function<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mycallback</span><span style="color: #007700">(</span><span style="color: #0000BB">$classname</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #FF8000">// einfach eine Datei einbinden, dass die Klassendefinitionen enthält<br />    // Sie erhalten $classname, womit Sie herausfinden können, welche<br />    // Klassendefinition benötigt wird<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$classname</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$serialized_object</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.unserialize-notes">
  <h3 class="title">Anmerkungen</h3>
  <div class="warning"><strong class="warning">Warnung</strong>
   <p class="para">
    <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> wird sowohl im Fehlerfall als auch bei einem serialisierten
    <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>-Wert zurückgegeben. Es ist möglich, diesen speziellen Fall
    abzufangen, indem man <code class="parameter">data</code> mit
    <code class="literal">serialize(false)</code> vergleicht oder prüft, ob ein
    <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> produziert wurde.
   </p>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.unserialize-seealso">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.json-encode.php" class="function" rel="rdfs-seeAlso">json_encode()</a> - Liefert die JSON-Darstellung eines Wertes</span></li>
    <li><span class="function"><a href="function.json-decode.php" class="function" rel="rdfs-seeAlso">json_decode()</a> - Dekodiert eine JSON-Zeichenkette</span></li>
    <li><span class="function"><a href="function.hash-hmac.php" class="function" rel="rdfs-seeAlso">hash_hmac()</a> - Berechnet einen Hash mit Schl&uuml;ssel unter Verwendung von HMAC</span></li>
    <li><span class="function"><a href="function.serialize.php" class="function" rel="rdfs-seeAlso">serialize()</a> - Erzeugt eine speicherbare Repr&auml;sentation eines Wertes</span></li>
    <li><a href="language.oop5.autoload.php" class="link">Automatisches Laden von Klassen</a></li>
    <li><a href="var.configuration.php#ini.unserialize-callback-func" class="link">unserialize_callback_func</a></li>
    <li><a href="var.configuration.php#ini.unserialize-max-depth" class="link">unserialize_max_depth</a></li>
    <li><a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a></li>
    <li><a href="language.oop5.magic.php#object.serialize" class="link">__serialize()</a></li>
    <li><a href="language.oop5.magic.php#object.unserialize" class="link">__unserialize()</a></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>