unserialize

(PHP 4, PHP 5, PHP 7)

unserialize Crea un valor PHP a partir de una representación almacenada

Descripción

unserialize ( string $str [, array $options ] ) : mixed

unserialize() toma una única variable serializada y la vuelve a convertir a un valor de PHP.

Advertencia

No pases valores no confiables proporcionados por el usuario a unserialize() con independencia del valor dado en options a allowed_classes. La deserialización puede resultar en que el código sea cargado y ejecutado debido a la instanciación y autocarga de objetos, y un usuario malicioso podría ser capaz de explotar este comportamiento. Utiliza un formato de intercambio de datos estándar y seguro como JSON (mediante json_decode() y json_encode()) si necesitas pasar datos serializados al usuario.

Si necesitas deserializar datos almacenados externamente, considera utilizar hash_hmac() para verificarlos. Asegúrate de que los datos no son modificados por nadie excepto por ti.

Parámetros

str

El string serializado.

Si la variable que está siendo convertida de vuelta es un objeto, PHP intentará llamar la función miembro __wakeup() si existe) automáticamente luego de haber recontruido satisfactoriamente el objeto.

Nota: Directiva unserialize_callback_func

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 object incompleto "__PHP_Incomplete_Class".) Use su php.ini, ini_set() o .htaccess para definir unserialize_callback_func. 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.

options

Cualquier opción para unserialize(), dada como un array asociativo.

Opciones válidas
Nombre Tipo Descripción
allowed_classes mixed Puede ser un array 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 unserialize() encuentra un objeto de una clase que no se acepta, el objeto será instanciado como __PHP_Incomplete_Class en su lugar. La omisión de esta opción es lo mismo que definirla como TRUE: PHP intentará instanciar objetos de cualquier clase.

Valores devueltos

El valor convertido es retornado, y puede ser un boolean, integer, float, string, array u object.

En caso de que el string pasado no pueda ser procesado para revertir la serialización, se devuelve FALSE y un error de tipo E_NOTICE es generado.

Historial de cambios

Versión Descripción
7.1.0 El elemento allowed_classes de options) es ahora estrictamente tipado, es decir: si cualquier cosa distinta de un array o un boolean es proporcionada, unserialize() retornará FALSE y lanzará un E_WARNING.
7.0.0 Se añadió el parámetro options.
5.6.0 Manipular los datos serializados reemplazando C: con O: para forzar la instanciación de objetos sin llamar al constructor ahora fallará.

Ejemplos

Ejemplo #1 Ejemplo de unserialize()

<?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();
    }
}
?>

Ejemplo #2 Ejemplo de unserialize_callback_func

<?php
$objeto_seriado
='O:1:"a":1:{s:5:"valor";s:3:"100";}';

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
}
?>

Notas

Advertencia

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 str con serialize(false) o atrapando el error E_NOTICE generado.

Ver también