(PHP 4, PHP 5, PHP 7)
unserialize — Crea un valor PHP a partir de una representación almacenada
unserialize() toma una única variable serializada y la vuelve a convertir a un valor de PHP.
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.
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.
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.
|
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.
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á. |
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
}
?>
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.