【问题标题】:Google app engine serialization issue谷歌应用引擎序列化问题
【发布时间】:2016-07-29 10:12:31
【问题描述】:

我想将 bigML 模型对象存储在内存缓存中。按照以下步骤操作。

1- 序列化一个 bigML 模型对象

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

3- 从内存缓存中获取序列化字符串。

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 中 3726 字节的偏移 100 处出错。

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

【问题讨论】:

  • 请不要将文字作为图片发布。而是将它们复制粘贴到您的帖子中。
  • 将对象直接放入内存缓存会自动序列化它们...试试看?

标签: php google-app-engine serialization


【解决方案1】:

毗湿奴,

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

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

查看其他答案:Change serialization functions in PHP for Memcached

【讨论】:

    【解决方案2】:
    $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));
    };
    

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

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 2011-05-13
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多