PHP: Notice: unserialize(): Error at offset.


Часто сталкивался с проблемой PHP:

Notice: unserialize(): Error at offset.

При этом проблема возникала рандомно. Появлялась иногда, но сильно раздражала.

Нашел выход - использовать шифрование в base64.

<?
$MyArray['parametr1'] = 111;
$MyArray['parametr2'] = array('parametr2.1'=>'qqq', 'parametr2.2'=>'www');
$MyArray['parametr3'] = 333;
$MyArray['parametr4'] = 444;

echo '<pre>';
print_r($MyArray);
echo '</pre>';

$toSession = base64_encode(serialize($MyArray)); // Сохраняем например в сессию
echo $toSession.'<hr>';
$fromSession = unserialize(base64_decode($toSession)); // Вынемаем нужную информаци

echo '<pre>';
print_r($fromSession);
echo '</pre>';
?>

В результате ошибка пропала.

Что-же тут происходит:

При шифровании, сериализованные данные шифруются в base64 кодировке. А при расшифровке, данные обратно декодятся.

Вся фишка вот в этом:

$toSession = base64_encode(serialize($MyArray));
$fromSession = unserialize(base64_decode($toSession));

Ещё одна причина частого появления данной ошибки - разные кодировки перед  serialize() и unserialize(), например UTF-8 и CP1251.

 

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика