Ошибка при unserialize() заказа на ShopKeeper

Если у вас часто встречается такая ошибка что при unserialize() вы не можете получить массив заказов из БД, то необходимо использовать данную функцию.

function My_checker($serialized_string){    
    if (empty($serialized_string)) return '';
    if ( !preg_match('/^[aOs]:/', $serialized_string) ) return $serialized_string;
    if ( @unserialize($serialized_string) !== false ) return $serialized_string;
    return
    preg_replace_callback(
        '/s\:(\d+)\:\"(.*?)\";/s', 
        function ($matches){  return 's:'.strlen($matches[2]).':"'.$matches[2].'";';  },
        $serialized_string )
    ;
}


Таким образом получаем массив

$order = unserialize(My_checker($data));

2 комментария

avatar
Эм… Оператор управления ошибками забыли?)
$order = @unserialize($data);
if ($order === false) return;
avatar
тут речь что если данные битые, функция их исправит.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.