首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP非序列化偏移量错误,适用于某些服务器,而不适用于其他服务器

PHP非序列化偏移量错误,适用于某些服务器,而不适用于其他服务器
EN

Stack Overflow用户
提问于 2010-11-11 05:00:12
回答 2查看 52.4K关注 0票数 17

我有一些可以在少数服务器上运行的代码,但没有其他服务器可以提供序列化的数据。我这样调用一个页面:

代码语言:javascript
复制
http://domain/index.php/sales/Drilldowns?params=a:12:{s:13:"selectionType";s:8:"facility";s:8:"dateType";s:5:"daily";s:10:"dateOption";s:9:"drilldown";s:6:"metric";s:13:"bookingAmount";s:9:"companyFK";s:2:"11";s:10:"facilityFK";s:0:"";s:7:"classFK";s:0:"";s:15:"customDateStart";s:4:"null";s:7:"newDate";s:10:"2010-11-01";s:10:"metricName";s:10:"Bookings%20$";s:16:"currentDateRange";s:10:"11/01/2010";s:23:"currentMetricNavigation";s:8:"DELDELTE";}&getExcel=0

这是我使用的代码:

代码语言:javascript
复制
protected function getRequestVariables(){
        if(isset($_REQUEST['params'])){
            var_dump($_REQUEST['params']);
            echo 'length:'.strlen($_REQUEST['params']);
            $vars = unserialize($_REQUEST['params']);
            var_dump($vars);
        } else {
            $vars = $_REQUEST;
            // unset saved drilldown options
            $this->ci->session->svar_set('postVars', null);
        }

这是一个var_dump输出:

代码语言:javascript
复制
string(447) "a:12:{s:13:\"selectionType\";s:8:\"facility\";s:8:\"dateType\";s:5:\"daily\";s:10:\"dateOption\";s:9:\"drilldown\";s:6:\"metric\";s:13:\"bookingAmount\";s:9:\"companyFK\";s:2:\"11\";s:10:\"facilityFK\";s:0:\"\";s:7:\"classFK\";s:0:\"\";s:15:\"customDateStart\";s:4:\"null\";s:7:\"newDate\";s:10:\"2010-11-01\";s:10:\"metricName\";s:10:\"Bookings $\";s:16:\"currentDateRange\";s:10:\"11/01/2010\";s:23:\"currentMetricNavigation\";s:8:\"DELDELTE\";}"

当它被处理时,我得到以下错误:

遇到错误

严重性:注意消息: unserialize() function.unserialize: 447字节的偏移量6处出错

文件名: plugins/Drilldowns.php

行号: 93

我在5.2.13上尝试--在一些Linux,一些OS,而不是其他的Linux上运行。我已经检查过php.ini,charset (我想)--我怎么也搞不懂。我试过像这样简单的事情

代码语言:javascript
复制
string(18) "a:1:{s:3:\"sam\";}" length:18

但它仍然是错误的。有什么线索能解释为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-11 05:04:45

这是引号前面的反斜杠:\"

当您删除它们时,它会起作用。

代码语言:javascript
复制
var_dump(unserialize('a:12:{s:13:"selectionType";s:8:"facility";s:8:"dateType";s:5:"daily";s:10:"dateOption";s:9:"drilldown";s:6:"metric";s:13:"bookingAmount";s:9:"companyFK";s:2:"11";s:10:"facilityFK";s:0:"";s:7:"classFK";s:0:"";s:15:"customDateStart";s:4:"null";s:7:"newDate";s:10:"2010-11-01";s:10:"metricName";s:10:"Bookings $";s:16:"currentDateRange";s:10:"11/01/2010";s:23:"currentMetricNavigation";s:8:"DELDELTE";}"'));

运行此功能的服务器可能打开了magic quotes

票数 23
EN

Stack Overflow用户

发布于 2013-12-28 20:48:25

我有这个问题,我花了一段时间来解决它。我只是找不到任何好的解决方案,但这就是我所做的来解决我的情况:

代码语言:javascript
复制
 base64_encode(serialize($User)); // make sure to encode the serialized object
 unserialize(base64_decode($User)); // decode it before unserializing
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4149030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档