У меня есть код, который работает на нескольких серверах, но не на других, которые появляются с сериализованными данными. Я вызываю страницу следующим образом:
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
Это код, который я использую:
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
:
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\";}"
Когда это обрабатывается, я получаю следующую ошибку:
Возникла ошибка PHP
Серьезность: Уведомление Сообщение: unserialize () [function.unserialize]: Ошибка при смещении 6 из 447 байт
Имя файла: plugins / Drilldowns.php
Номер строки: 93
Я пытаюсь это сделать на 5.2.13 – работает на некоторых Linux, некоторые OS X, а не на других. Проверили php.ini, charset (я думаю) – я не могу понять это для жизни меня. Я пробовал вещи так же просто, как
string(18) "a:1:{s:3:\"sam\";}" length:18
и это все еще ошибки. Какую-либо подсказку о том, почему?
Это обратная косая черта перед кавычками: \"
Когда вы их удаляете, он работает.
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";}"'));
Серверы, на которых это работает, возможно, включены магические кавычки .
У меня была эта проблема, и мне потребовалось некоторое время, чтобы решить эту проблему. Я просто не мог найти хорошего решения, но это то, что я сделал, чтобы решить мою ситуацию:
base64_encode(serialize($User)); // make sure to encode the serialized object unserialize(base64_decode($User)); // decode it before unserializing