ФорумПрограммированиеPHP для идиотов → Использование serialize и unserialize когда нужно

Использование serialize и unserialize когда нужно

  • Ramazan

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 1 октября 2010 г. 14:18

    есть собственный класс serialize, в котором всего два метода

    1. encode
    function encode($data)
    {
    if(is_numeric($value) or is_string($value))
    return $value;
    else
    return serialize($value);
    }

    2. decode
    function decode($data)
    {
    if(preg_match('/(a|O|s|b)\x3a[0-9]*?((\x3a((\x7b?(.+)\x7d)|(\x22(.+)\x22\x3b)))|(\x3b))/', $data)
    return unserialize($data);
    else
    return $data;
    }


    Смысл в том, что мне нет надобности сериализовать огромный текст, так же нет надобности в обратном.

    Тут со старого проекта обратился нынешний программер и начал терроризировать по поводу того, что не все данные правильно проходят процесс десериализации.
    Мысль только одна, что в
    (a|O|s|b)

    указанно не всё, что может там быть так ли это?
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 14:51, спустя 33 минуты 8 секунд

    Вообще какая-то херня получается. Почему это система не знает что (какой формат) она получает? Я понимаю что она может не знать строка это или цифровое значение, но не знать массив это или простая строка - это уже полный ппц.
    В общем, у вас проблема не в регулярке, а с самой реализации. По крайней мере я склонен к такой версии. А что если я решу передать строку (текстовую, заметь), в которой будет указано примерно следующее: "если сериализировать массив, то на выходе получим a:2:{i:0;s:5:"apple";i:1;s:6:"banana";} и будем с ним работать" ? Тогда система посчитает это сериализированым массивом и мы получить хуйем по лбу, но никак не нужный нам результат.
  • Ramazan

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 1 октября 2010 г. 15:11, спустя 19 минут 28 секунд

    А что если я решу передать строку (текстовую, заметь), в которой будет указано примерно следующее: "если сериализировать массив, то на выходе получим a:2:{i:0;s:5:"apple";i:1;s:6:"banana";} и будем с ним работать" ?


    это понятно что работать не будет, но пока таких прецедентов не было, сам я особо этим способом пользуюсь, но на том проекте он весит и переписывать его будет проблемой, так как на нём много чего завязано
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 16:59, спустя 1 час 48 минут 16 секунд

    юзай сериализацию всегда и не выябывайся. регулярками такие вещи не проверяют
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 17:23, спустя 23 минуты 58 секунд

    phpdude, гы, а вот я, честно признаться, не знаю что будет если сериализировать простую строку :) не пробовал как-то ни разу.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 19:15, спустя 1 час 51 минуту 40 секунд

    самое смешное что это настолько простая операцию, что я уверен в том что она проще регулярки
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 20:11, спустя 55 минут 56 секунд

    Смысл в том, что мне нет надобности сериализовать огромный текст, так же нет надобности в обратном.

    А в чём проблема? С ним ничего не произойдёт, только спереди добавится пара символов, о том, что это строка.

    Кроме того: http://blgo.ru/blog/2010/05/27/igbinary/

Пожалуйста, авторизуйтесь, чтобы написать комментарий!