2016-07-29 9 views
0

私はmemcacheにbigML Modelオブジェクトを保存します。以下の手順に従ってください。Google App Engineのシリアル化の問題

1-シリアライズbigMLモデルオブジェクト

2-ストアメモリキャッシュにシリアライズストリング。

3- memcacheからのシリアル化文字列をフェッチします。

4-文字列のシリアル化を解除します。

$local_model = new Model($latestModel, $api); 
$local_model_obj = serialize($local_model); 
$memcache->set('latest_model_object',$local_model_obj); 
$local_model = unserialize($local_model_obj); 

注:シリアル化とシリアル化の解除は、ローカルサーバーで正常に動作しています。サーバーではそれがエラー以下に投げられています。

アンシリアライズ()/ベース100 3726のバイトを..オフセットの誤差

スクリーンショット:http://prnt.sc/byzzai

enter image description here

+1

画像としてテキストを投稿しないでください。代わりに投稿にコピーして貼り付けてください。 –

+0

オブジェクトを直接memcacheに置くと、それらを自動的に連載します...試してみてください。 – Tom

答えて

0

Vaishnavesh、これは異なる符号化の問題であるかもしれない

ローカルサーバーとリモートサーバーの間のバージョン。

$local_model_obj = base64_encode(serialize($local_model)); 
... 
$local_model = unserialize(base64_decode($local_model_obj)); 

はチェックこの他の答え:Change serialization functions in PHP for Memcached

+0

私は同じことを試みましたが、うまくいきません。 – Vaishnavesh

0
$local_model_obj = serialize($local_model); 
$specialChar = before ('ass"', after ('";O:8:"', $local_model_obj)); 
$local_model_obj = str_replace($specialChar, 'stdCl', $local_model_obj); 
$local_model = unserialize($local_model_obj); 

function after ($this, $inthat) 
{ 
    if (!is_bool(strpos($inthat, $this))) 
    return substr($inthat, strpos($inthat,$this)+strlen($this)); 
}; 
function before ($this, $inthat) 
{ 
    return substr($inthat, 0, strpos($inthat, $this)); 
}; 

をそれが正常に動作しているとにかく、助けbase64エンコードを使用しているかどうかをチェックしてみてください。私はそれが有効な方法ではないと思う。

関連する問題