PHP でシリアライズしたデータが壊れてしまう場合は base64_encode をする

Notice: unserialize() [function.unserialize]: Error at offset 0 of 2 bytes in /var/usr/to/path 

こんなんがでちゃうとき

1、文字コードが違う。
エンコードするときとデコードするときで
文字コード違うとなるらしい

function _unserialize($string) {
    $ret = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $string);
    return unserialize($ret);
}

で対応

2、それでもなるとき
HTTP経路上でバイト数が変わったりゴミデータを拾ったりすることがあるらしい。
そんなときは

// シリアライズしつつ base64 エンコードをする関数
function serialize_base64_encode($array) {
	$data = serialize($array);
	$data = base64_encode($data);
	return $data;
}
 
// base64 デコードしつつシリアライズされたデータを復元する関数
function unserialize_base64_decode($data) {
	$data = base64_decode($data);
	$array = unserialize($data);
	return $array;
}

ってやってあげると大丈夫かも