unserialize
(PHP 4, PHP 5, PHP 7, PHP 8)
unserialize — Bir PHP değerini saklanmış gösteriminden oluşturur
Açıklama
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.
|
Hatalar/İstisnalar
Nesneler, kendi nesneleştirme işleyicilerinde Throwable
yavrulayabilir.
Ö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.