(PHP 4, PHP 5, PHP 7, PHP 8)
unserialize — Bir PHP değerini saklanmış gösteriminden oluşturur
unserialize() işlevi tek bir dizgeleştirilmiş değişken alır ve bunu tekrar bir PHP değeri haline getirir.
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.
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.
İ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ö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.
Nesneler, kendi nesneleştirme işleyicilerinde Throwable yavrulayabilir.
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.
|
Ö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
}
?>