Sayfalar

PHP'de Serialize ve Deserialize İşlemleri ile Değişken İçerigini Saklayabilmek


Problem : Degisken icerigini bir yerde saklamak istiyorsunuz.
Cozum : serialize () ve unserialize () hazir fonksiyonlarini kullanarak kendi fonksiyonlarinizi yazin.

loadsave.inc

<?php
//
// File: loadsave.inc
// Library functions for saving and loading data to and from a file
//
//

//
// int save (string varname) :
// Save the value of varname to file
//

function save($var) {
global $$var;
$data = serialize($$var); // String Rep. of $$var
$filename = "php_serialized_vars/" . $$var . ".txt";
$fp = @fopen($filename, "w") or die ("Cannot open $filename for write access");

fwrite($fp, $data);
@fclose($fp) or die ("Cannot close $filename");
return(true);
}

//
// int load (string varname)
// Load the value of varname from a file
//
function load($var)
{
global $$var; // Put the saved variable in the global
// namespace
$filename = "php_serialized_vars/" . $$var . ".txt";
$fp = @fopen($filename, "r") or die ("Cannot open $filename for read access");

$data = fread($fp, filesize($filename));
@fclose($fp) or die("Cannot close $filename");

$$var = unserialize($data);
return(true);
}
?>


Simdi de bu fonksiyonlari programlariniz icinden nasil kullanacaginiza bakalim :

save.php

<?php
$foo = "merhaba";
save ('foo');
?>
<a href="load.php">Burayi tiklayiniz</a>

load.php

<?php
load('foo');
print $foo;
?>

Tartisma : Verinin dizi,nesne vb. ne olduguna bakilmadan serialize () fonksiyonu ile string seklinde bir sikistirma yapilir.unserialize fonksiyonu bu string okuyarak tekrar eski haline getirir.

Birden fazla degiskenin ayni anda serialize edilmesi islemi

Bu islem ile ayni zamanda diger programlama dilleri veya program surecleri ile verilerinizi paylasabilirsiniz.

Cozum : WDDX fonksiyonlari ile sikistirma yapiniz.( http://www.wddx.org/ )

<?php
$ice_cream = array ("Mint Chocolate Chip","Vanilla","Chocalate","Coffee");
$packet_id = wddx_packet_start("PHP");
wddx_add_vars($packet_id, "ice_cream");
$packet = wddx_packet_end($packet_id);
?>

Web Distributed Data sXchange formati, " Uygulamalar arasinda kompleks veri alis-verisi icin gelistirilmis bir mekanizmadir."Bu fonksyionlar ile sikistirma yapildiginda veri "paketleri" hazirlanir.Bu pakelter degiskeninizin sakladigi veri ile ilgili bilgi icerir.Bu pakelter saklanir ve istendiginde programiniz tarafindan tekrar okunur.

WDDX Deserialization

WDDX-ile sikistirilmis paket var ve cozmek, yani degiskenin degerini okumak istiyorsunuz.

wddx_deserialize fonksiyonu ile WDDX string'ini PHP degiskenine donusturun :

<?php
$favorite_tv_shows = array("M*A*S*H", "Seinfeld", "The Simpsons");
$text = wddx_serialize_vars($favorite_tv_shows);
$favorite_tv_shows_again = wddx_deserialize ($text);

foeeach ($favorite_tv_shows_again as $show) {
print "$shown<br>n";
}

?>

wddx_deserialize fonksiyonu argument olarak WDDX paketini alir ve onu PHP degiskenleinden olusan bir diziye cevirir.Bu fonksiyonun en guzel yani bir baska dilden gelen WDDX paketini programiniz icinde PHP degiskenlerine donusturmesidir.