PHP - Filtered unserialize()
Pengenalan
Hai sana! Selamat datang ke perjalanan kami ke dunia pemrograman PHP. Hari ini, kita akan mendalamkan topik yang bisa sia-sia dan sedikit menakutkan bagi pemula: unserialize()
dengan filter. Tetapi jangan khawatir, saya akan menghidangkan Anda langkah demi langkah, memastikan Anda mengerti segala sesuatu sepanjang jalan.
Apa itu serialisasi?
Sebelum kita melompat ke unserialize()
, mari pertama-tama mengerti apa itu serialisasi. Serialisasi adalah proses konversi objek atau struktur data menjadi format yang dapat disimpan atau dikirim dan kemudian direkonstruksi kemudian. Dalam PHP, ini biasanya dilakukan menggunakan fungsi serialize()
.
$data = array('a', 'b', 'c');
$serialized_data = serialize($data);
echo $serialized_data; // Outputs: a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}
Dalam contoh di atas, kita memiliki array $data
yang di-serialisasikan menjadi string menggunakan serialize()
. String yang dihasilkan kemudian dapat disimpan di database atau dikirim melalui jaringan.
Apa itu unserialisasi?
Unserialisasi adalah proses terbalik dari serialisasi. Itu mengambil string yang di-serialisasikan dan mengubahnya kembali ke bentuk aslinya. Dalam PHP, ini dilakukan menggunakan fungsi unserialize()
.
$serialized_data = 'a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}';
$data = unserialize($serialized_data);
print_r($data); // Outputs: Array ( [0] => a [1] => b [2] => c )
Dalam contoh ini, kita mengambil string yang di-serialisasikan $serialized_data
dan mengubahnya kembali ke array menggunakan unserialize()
.
Apa itu filter?
Sekarang, mari bicarakan tentang filter. Ketika Anda bekerja dengan data yang di-unserialisasikan, penting untuk memastikan bahwa data itu aman dan valid. Ini adalah tempat filter memainkan perannya. Filter memungkinkan Anda menentukan aturan tambahan untuk bagaimana data harus ditangani saat unserialisasi.
Ada dua jenis filter utama yang tersedia dalam PHP:
-
Options: Ini digunakan untuk mengontrol perilaku
unserialize()
. Misalnya, Anda dapat menggunakan opsiUNSERIALIZE_THROW_ON_INVALID
untuk melempar eksepsi jika data tidak dapat di-unserialisasikan. - Callbacks: Ini adalah fungsi yang ditentukan pengguna yang dapat digunakan untuk melakukan validasi khusus atau transformasi pada data yang di-unserialisasikan.
Menggunakan filter dengan unserialize()
Sekarang kita telah melihat dasar-dasar, mari lihat bagaimana kita dapat menggunakan filter dengan unserialize()
. Kita akan mulai dengan filter opsi.
Filter Opsi
Opsi UNSERIALIZE_OPTIONS
memungkinkan Anda menentukan flag tambahan yang mengontrol perilaku unserialize()
. Ini adalah contoh:
$serialized_data = 'a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}';
$options = ['options' => ['allowed_classes' => false]];
$data = unserialize($serialized_data, $options);
Dalam contoh ini, kita telah mengatur opsi allowed_classes
ke false
, yang berarti hanya kelas native PHP yang akan diizinkan untuk di-unserialisasikan. Jika data yang di-serialisasikan mengandung kelas lain, kesalahan akan dilempar.
Filter Callback
Filter callback adalah fitur yang lebih tingkat lanjut yang memungkinkan Anda menentukan logika validasi atau transformasi sendiri. Ini adalah contoh:
function my_callback($class, $data, $filter) {
if ($class === 'MyClass') {
return new MyClass($data);
}
return false;
}
$serialized_data = 'O:8:"MyClass":1:{s:4:"name";s:5:"Alice";}';
$data = unserialize($serialized_data, ['callback' => 'my_callback']);
Dalam contoh ini, kita telah menentukan fungsi callback my_callback()
yang memeriksa jika kelas yang di-unserialisasikan adalah MyClass
. Jika itu benar, ia membuat instance baru dari MyClass
dengan data yang diberikan. Jika tidak, ia mengembalikan false
, yang akan menyebabkan unserialize()
gagal.
Kesimpulan
Wah! Itu adalah perjalanan yang menarik, bukan? Saya harap Anda sekarang memiliki pengertian yang lebih baik tentang serialisasi, unserialisasi, dan bagaimana menggunakan filter dengan unserialize()
dalam PHP. Ingat, latihan membuat sempurna, jadi cobalah konsep ini dengan beberapa data contoh. Dan jangan lupa untuk bersenang-senang sepanjang jalan!
Credits: Image by storyset