unserialize

(PHP 4, PHP 5, PHP 7, PHP 8)

unserializeBir PHP değerini saklanmış gösteriminden oluşturur

Açıklama

unserialize(string $veri, array $seçenekler = []): mixed

unserialize() işlevi tek bir dizgeleştirilmiş değişken alır ve bunu tekrar bir PHP değeri haline getirir.

Uyarı

allowed_classes seçeneğine bakmaksızın işleve güvenilmeyen kullanıcı girdisini aktarmayın. Nesneleştirme, nesne örnekleme ve otomatik yükleme nedeniyle kodun yüklenmesine ve yürütülmesine neden olabilir ve kötü niyetli bir kullanıcı bundan yararlanabilir. Kullanıcıya dizeleştirilmiş verileri iletmeniz gerekiyorsa JSON (json_decode() ve json_encode()) aracılığıyla) gibi güvenli, standart bir veri değişim biçimi kullanın.

Harici olarak depolanan dizeleştirilmiş verileri nesneleştirmek gerekirse, veri doğrulama için hash_hmac() kullanımı düşünülebilir. Verilerin sizden başka hiç kimse tarafından değiştirilmediğinden emin olun.

Bağımsız Değişkenler

veri

Dizeleştirilmiş değer.

Dizeleştirilmiş bir değişkeni bir nesne haline getirmeye çalışırsanız PHP nesneyi oluşturduktan sonra otomatik olarak __unserialize() veya __wakeup() üye işlevini (varsa) çağıracaktır.

Bilginize: unserialize_callback_func yönergesi

unserialize_callback_func yönergesinde belirtilen geriçağırım işlevi tanımsız bir sınıfın dizgeleştirmesi kaldırılırken çağrılır. Geriçağırım işlevi belirtilmezse, nesne __PHP_Incomplete_Class olarak örneklenir.

seçenekler

unserialize() işlevine aktarılacacak seçenekleri içeren ilişkisel bir dizi.

Geçerli seçenekler
İsim Tür Açıklama
allowed_classes mixed Üç değerdem biri: Kabul edilmesi gereken sınıf isimleri dizisi, hiçbir sınıfı kabul etmemek için false ya da tüm sınıfları kabul etmek için true. Bu seçenek tanımlanırsa ve unserialize()), kabul edilmeyen bir sınıfla karşılaşırsa, bu sınıf yerine __PHP_Incomplete_Class örneklenecektir. Bu seçeneğin atlanması, onu true olarak tanımlamakla aynıdır: PHP, belirtilen sınıfları örneklemeye çalışır.
max_depth int Nesneleştirme sırasında izin verilen veri yapılarının azami derinliği olup yığıt taşmalarını engellemek için tasarlanmıştır. Öntanımlı derinlik sınırı 4096 olup max_depth'e 0 atanarak devre dışı bırakılabilir.

Dönen Değerler

Dönüştürülerek döndürülen değer bool, int, float, string, array veya object türünde olabilir.

Nesneleştirilemeyen bir dizge belirtilmesi durumunda işlev false döndürür ve bir E_WARNING çıktılar.

Hatalar/İstisnalar

Nesneler, kendi nesneleştirme işleyicilerinde Throwable yavrulayabilir.

Sürüm Bilgisi

Sürüm: Açıklama
8.3.0 Nesneleştirilemeyen bir dizge belirtilmesi durumunda artık bir E_WARNING üretiliyor. Evvelce E_NOTICE üretilirdi.
7.4.0 Nesneleştirme sırasında izin verilen yapıların azami derinliğini ayarlamak için seçenekler bağımsız değişkenine max_depth öğesi eklendi.
7.1.0 allowed_classes seçeneği artık katı türde, yani array veya bool türü dışında bir değer aktarılırsa unserialize() işlevi false döndürür ve bir E_WARNING oluşturur.

Örnekler

Örnek 1 - unserialize() örneği

<?php
// Burada, oturum verisini $session_data dizisine yüklemek
// için bir veritabanından seçilmiş bir dizgeyi nesneleştireceğiz
// Bu örnek serialize() işlevi örneğinin tamamlayıcısıdır.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!
odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {
// çalıştırma veya alım başarısız olursa boş bir dizi ilklendireceğiz
$session_data = array();
} else {
// artık dizgeleştirilmiş veri $tmp[0] içinde.
$session_data = unserialize($tmp[0]);
if (!
is_array($session_data)) {
// birşeyler yanlış gitmiş, boş bir dizi ilklendirelim
$session_data = array();
}
}
?>

Örnek 2 - unserialize_callback_func örneği

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

// kendi geriçağırım işlevimizi belirtelim
ini_set('unserialize_callback_func', 'mycallback');

function
mycallback($classname)
{
// Sınıf tanımınızı içeren bir dosyayı dahil etmeniz yeterlidir
// Hangi sınıf tanımının gerçekleneceğini $classname değişkenine
// bakarak saptayacaksınız
}
?>

Notlar

Uyarı

Hata durumunda veya dizgeleştirilmiş bir false değerini nesneleştirmeye çalışıyorsanız işlev false döndürür. Bu özel durumu veri bağımsız değişkenini serialize(false) ile karşılaştırarak veya E_NOTICE çıktısını inceleyerek yakalayabilirsiniz.

Ayrıca Bakınız