unserialize() [function.unserialize]: Error at offset ecshop 原因是字符串太大了。

本文介绍了一种在UTF-8编码环境下解决PHP序列化字符串格式问题的方法,通过正则表达式修正序列化数据,避免了反序列化过程中出现的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 读结果缓存文件
 *
 * @params  string  $cache_name
 *
 * @return  array   $data
 */
function read_static_cache($cache_name)
{
    if ((DEBUG_MODE & 2) == 2)
    {
        return false;
    }
    static $result = array();
    if (!empty($result[$cache_name]))
    {
        return $result[$cache_name];
    }
    $cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
    if (file_exists($cache_file_path))
    {
        include_once($cache_file_path);
        $result[$cache_name] = $data;
        return $result[$cache_name];
    }
    else
    {
        return false;
    }
}

/**
 * 写结果缓存文件
 *
 * @params  string  $cache_name
 * @params  string  $caches
 *
 * @return
 */
function write_static_cache($cache_name, $caches)
{
    if ((DEBUG_MODE & 2) == 2)
    {
        return false;
    }
    $cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
    $content = "<?php\r\n";
    $content .= "\$data = " . var_export($caches, true) . ";\r\n";
    $content .= "?>";
    file_put_contents($cache_file_path, $content, LOCK_EX);
}




Notice: unserialize() [function.unserialize]: Error at offset解决方法

报错信息:
Notice: unserialize() [function.unserialize]: Error at offset 159 of 647 bytes in \eshop\includes\lib_common.php on line 224

lib_common.php的224行
  1. $cfg = unserialize($GLOBALS['_CFG']['integrate_config']);
复制代码


是将会员整合配置信息反序列化的操作,产生报错的原因是因为序列化的字符串格式不对,无法正常反序列化,产生这种情况的时候很少,目前只在UTF-8编码格式下发现。

解决方法,在lib_common.php大约604行找到
  1.         if (empty($arr['integrate_code']))
  2.         {
  3.             $arr['integrate_code'] = 'ecshop'; // 默认的会员整合插件为 ecshop
  4.         }
  5.         write_static_cache('shop_config', $arr);
复制代码


修改为
  1.         if (empty($arr['integrate_code']))
  2.         {
  3.             $arr['integrate_code'] = 'ecshop'; // 默认的会员整合插件为 ecshop
  4.         }
  5.         if (!empty($arr['integrate_config']) && EC_CHARSET == 'utf-8')
  6.         {
  7.             $arr['integrate_config'] = preg_replace('!s:(\d+):"(.*?)";!se',"'s:'.strlen('$2').':\"$2\";'",str_replace(' ','',$arr['integrate_config']));
  8.         }
  9.         write_static_cache('shop_config', $arr);
复制代码


修改完成后,进入后台清除缓存。

注意:这个只能用在lib_common.php 224行的这个错误上,如果不是请不要随便修改程序。如果在使用中遇到问题可通过站内信与我联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值