1
0
mirror of https://github.com/php/doc-es.git synced 2026-04-26 00:28:03 +02:00
Files
archived-doc-es/reference/var/functions/unserialize.xml
T
Pedro Antonio Gil Rodríguez f4311e7a8a Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337560 c90b9560-bf6c-de11-be94-00142212c4b1
2015-08-20 11:33:10 +00:00

262 lines
8.3 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 6e6d82f0970ebfa4f3322e96efb6f9d0cc114205 Maintainer: aeoris Status: ready -->
<!-- Reviewed: no Maintainer: aeoris -->
<refentry xml:id="function.unserialize" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>unserialize</refname>
<refpurpose>
Crea un valor PHP a partir de una representación almacenada
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>unserialize</methodname>
<methodparam><type>string</type><parameter>str</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>options</parameter></methodparam>
</methodsynopsis>
<simpara>
<function>unserialize</function> toma una única variable serializada y
la vuelve a convertir a un valor de PHP.
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>str</parameter></term>
<listitem>
<para>
El string serializado.
</para>
<para>
Si la variable que está siendo convertida de vuelta es un objeto, PHP
intentará llamar la función miembro <link linkend="object.wakeup">__wakeup()</link>
si existe) automáticamente luego de haber recontruido satisfactoriamente
el objeto.
</para>
<para>
<note>
<title>Directiva unserialize_callback_func</title>
<para>
Es posible establecer una función-llamada de retorno la cual será
llamada si una clase no definida debería ser instanciada durante el
proceso de revertir la seriación(para prevenir que se reciba un <type>object</type> incompleto "__PHP_Incomplete_Class".)
Use su &php.ini;, <function>ini_set</function> o &htaccess;
para definir '<literal>unserialize_callback_func</literal>'. Cada vez que una clase no definida
deba ser instanciada, esta función será llamada. Para deshabilitar esta característica simplemente
asigne un valor vacío a este parámetro.
</para>
</note>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
Cualquier opción para <function>unserialize</function>, dada como un
array asociativo.
</para>
<table>
<title>Opciones válidas</title>
<tgroup cols="3">
<thead>
<row>
<entry>Nombre</entry>
<entry>Tipo</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>allowed_classes</literal></entry>
<entry><type>mixed</type></entry>
<entry>
<simpara>
Puede ser un <type>array</type> de nombres de clases que deben ser
aceptadas, &false; para no aceptar clases, o &true; para aceptar todas
las clases. Si esta opción se define y
<function>unserialize</function> encuentra un objeto de una clase
que no se acepta, el objeto será instanciado como
<classname>__PHP_Incomplete_Class</classname> en su lugar.
</simpara>
<simpara>
La omisión de esta opción es lo mismo que definirla como &true;: PHP
intentará instanciar objetos de cualquier clase.
</simpara>
</entry>
</row>
</tbody>
</tgroup>
</table>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
El valor convertido es retornado, y puede ser un <type>boolean</type>,
<type>integer</type>, <type>float</type>, <type>string</type>,
<type>array</type> u <type>object</type>.
</para>
<para>
En caso de que el string pasado no pueda ser procesado para revertir la
serialización, se devuelve &false; y un error de tipo
<constant>E_NOTICE</constant> es generado.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.0.0</entry>
<entry>
Se añadió el parámetro <parameter>options</parameter>.
</entry>
</row>
<row>
<entry>5.6.0</entry>
<entry>
Manipular los datos serializados reemplazando <literal>C:</literal>
con <literal>O:</literal> para forzar la instanciación de objetos sin
llamar al constructor ahora fallará.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Ejemplo de <function>unserialize</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Aquí usamos unserialize() para cargar los datos de sesión
// provenientes del string seleccionado desde la base de datos en el
// array $datos_sesion. Este ejemplo complementa aquel descrito con serialize().
$con = odbc_connect("bd_web", "php", "gallina");
$sent = odbc_prepare($con, "SELECT datos FROM sesiones WHERE id = ?");
$datos_sql = array($_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($sent, &$datos_sql) || !odbc_fetch_into($sent, &$tmp)) {
// si la ejecución del comando o la recuperación de datos falla,
// inicializar una matriz vacía
$datos_sesion = array();
} else {
// ahora deberíamos tener los datos serializados en $tmp[0].
$datos_sesion = unserialize($tmp[0]);
if (!is_array($datos_sesion)) {
// algo ha fallado, inicializar un array vacío
$datos_sesion = array();
}
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Ejemplo de unserialize_callback_func</title>
<programlisting role="php">
<![CDATA[
<?php
$objeto_seriado='O:1:"a":1:{s:5:"valor";s:3:"100";}';
// la directiva unserialize_callback_func está disponible a partir de PHP 4.2.0
ini_set('unserialize_callback_func', 'mi_llamada_de_retorno'); // defina su callback_function
function mi_llamada_de_retorno($nombre_clase)
{
// tan solo incluya un fichero que contenga su definición de clase
// recibe $nombre_clase para determinar qué definición de clase requiere
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
&false; es devuelto tanto en el caso de un error como cuando se
convierte el valor seriado &false;. Es posible atrapar este caso especial
comparando <parameter>str</parameter> con
<literal>serialize(false)</literal> o atrapando el error
<constant>E_NOTICE</constant> generado.
</para>
</warning>
<warning>
<para>
No proporcione datos no fiables provenientes del usuario a <function>unserialize</function>.
Revertir la serialización puede resultar en que haya código que se cargue y ejecute debido a la instanciación
y autocarga de objetos, y un usuario malicioso podría ser capaz de explotar
esto. Se debe utilizar un formato de intercambio de datos seguro y estándar, como JSON (a través de
<function>json_decode</function> y <function>json_encode</function>) si
es necesario pasar datos serializados al usuario.
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>serialize</function></member>
<member><link linkend="language.oop5.autoload">Autocarga de clases</link></member>
<member><link linkend="unserialize-callback-func">unserialize_callback_func</link></member>
<member><link linkend="object.wakeup">__wakeup()</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->