вы десериализации данные неправильно
a:57{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:10:"Abcdubai";s:5:";}
если вы пытаетесь десериализируются его сообщения об ошибках E_ALL вы увидите уведомление
$data = 'a:57{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:10:"Abcdubai";s:5:";}';
var_dump($data);
вы получите
Notice: unserialize(): Error
потому
a:57
длина массива и из данных, которые вы должны это явно не 57
.
s:
указывает на длину строки s:10:"Abcdubai"
Строка Abcdubai
не в длину 10 это 8, так что вам нужно изменить, что s:8:"Abcdubai"
Наконец, вы должны s:5:";
в конце той же причине s:5
означает строка 5 символов в длину, и это пустой с одной двойной кавычки
<?php
// this the valid data
$data = 'a:4:{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:8:"Abcdubai";}';
$data = unserialize($data);
// accessing the valid serialized data
echo $data['THEME_NAME'];
echo $data['PUBLIC_ADS_LIMIT'];
echo $data['PUBLIC_EDIT_LIMIT'];
echo $data['SITENAME'];
вы можете попробовать этот метод т о решении форматирования выдает
function fixUnserializeFormatting($data){
// fix string length (will fix s:)
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $data);
// remove empty matches with one double qoute
$data = preg_replace('/s\:+[0-9]+\:";/i', '', $data);
// trying to get the right array length
$strings = substr_count($data,';')/2;
// fixing array length
$data = preg_replace('/^a:+[0-9]+:/i', "a:{$strings}:", $data);
// finally returning the formatted data
return $data;
}
Использование
$data = 'a:57:{s:10:"THEME_NAME";s:5:"green";s:16:"PUBLIC_ADS_LIMIT";s:1:"5";s:17:"PUBLIC_EDIT_LIMIT";s:1:"5";s:8:"SITENAME";s:10:"Abcdubai";s:5:";}';
$data = fixUnserializeFormatting($data);
var_dump(unserialize($data));
Там, кажется, разрыв строки после ': с 57:'. Это и в исходном коде? Кроме того, если вы просто эхом отдаете результат, вы можете упустить тот факт, что при ошибке 'unserialize()' возвращает 'false'. Проверьте, что именно возвращает функция с помощью 'var_dump()' например. – Boaz
'Примечание: unserialize(): Ошибка при смещении 132 из 144 байтов' не забудьте отобразить все ошибки, и вы увидите уведомление – codinginsane
возможный дубликат [unserialize() \ [function.unserialize \]: ошибка со смещением] (http://stackoverflow.com/questions/10152904/unserialize-function-unserialize-error-at-offset) – Neo