(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
Nesneleştirme sırasında tanımsız bir sınıf örneklenecekse (eksikli bir "__PHP_Incomplete_Class" nesnesinin elde edilmesini engellemek için) çağrılmak üzere bir geriçağırım işlevi tanımlamak mümkündür. Böyle bir işlevi php.ini veya .htaccess dosyasında unserialize_callback_func yönergesinde veya ya da ini_set() işlevinde belirtebilirsiniz. Bu işlevin her çağrılışında tanımsız bir sınıfın örneklenmesi gerekir. Bu özelliği iptal etmek için bu ayarı boş bırakmanız yeterlidir.
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_NOTICE
çıktılar.
Nesneler, kendi nesneleştirme işleyicilerinde Throwable yavrulayabilir.
Sürüm: | Açıklama |
---|---|
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