Google应用引擎序列化问题

时间:2016-07-29 10:12:32

标签: php google-app-engine serialization

我想在memcache中存储bigML Model对象。遵循以下步骤。

1-序列化bigML模型对象

2-将序列化字符串存储在memcache中。

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);

注意:序列化和反序列化在我的本地服务器中正常工作。并且在服务器中它低于错误。

unserialize():在/ base ..的偏移100处的3726字节错误。

屏幕截图:http://prnt.sc/byzzai

enter image description here

2 个答案:

答案 0 :(得分:0)

Vaishnavesh,

这可能是本地服务器和远程服务器之间不同编码版本的问题。无论如何,尝试检查使用base64编码是否有帮助:

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

检查另一个答案:Change serialization functions in PHP for Memcached

答案 1 :(得分: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));
};

工作正常。但我认为这不是一种有效的方式。