Сериализация
Модератор: Модераторы
Сериализация
Господа-граждане, всем доброго!
Впервые столкнулся с задачей сериализации/десериализации данных. В результате неких изысканий установил, что сериализация бывает типов "двоичная" и "XML". Вроде в дельфях есть встроенные механизмы для этого. Что в Lazarus'е есть для этого? Модуль DOT? Подскажите пож., куда копать?
Впервые столкнулся с задачей сериализации/десериализации данных. В результате неких изысканий установил, что сериализация бывает типов "двоичная" и "XML". Вроде в дельфях есть встроенные механизмы для этого. Что в Lazarus'е есть для этого? Модуль DOT? Подскажите пож., куда копать?
в лазарусе тоже есть. точнее, даже в FPC
Доброго! Задача в целом состоит в следующем. Есть некий сайт инет-магазина, использует БД MySql. В числе прочего, есть таблица заказов, которую необходимо отслеживать удаленно с нескольких точек продаж. На точках имеется софт с MySqlСlient для удаленного доступа к БД. В таблице заказов имеется blob-поле с нужной информацией, реализованное как сериализованный массив. Ответ от службы поддержки по этому поводу был таким:
Да там обычной функцией php serialize сериализуется..
и deserialize к обратному виду приводится.
Вот чешу репу и думаю, как быть...
Да там обычной функцией php serialize сериализуется..
и deserialize к обратному виду приводится.
Вот чешу репу и думаю, как быть...
пусть либо не используют php.serialize, а делают нормально.
либо раскапывать формат сериализации php, делать парсер для него
либо раскапывать формат сериализации php, делать парсер для него
... либо переписывать вашу программу, которая отслеживает таблицу заказов, с Pascal на PHP, и использовать там php unserialize(). Но с учётом того, что вы спрашиваете на freepascal.ru, а не на каком-нибудь phpforum, можно пойти по второму из путей, предложенных hinst, т.е. раскопать формат сериализации php. Для начала можно сдёрнуть содержимое поля из базы как строку, сохранить в файл и изучить его в текстовом или hex-редакторе. Может быть, там всё очевидно.
Последний раз редактировалось Odyssey 07.09.2010 00:11:23, всего редактировалось 1 раз.
ну, советовать разработчикам, как писать код - это нонсенс, никому не понравится!
Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник? Грустно. У меня магазин на Lazarus достаточно крутой, хотелось по-легкому прикрутить его к сайту - дело-то благородное!
Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник? Грустно. У меня магазин на Lazarus достаточно крутой, хотелось по-легкому прикрутить его к сайту - дело-то благородное!
я так понимаю, сервер отвечает на запросы клиента строкой, полученной в результате работы функции PHP serialize. Если я правильно понял, и это так... То вот это нонсэнс
. Можете смело пояснить разработчикам, что так не делается, т.к. это абсолютно левый формат.
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник?
Насколько я помню, serialize() возвращает особым образом оформленный текст с разделителями. Разобрать его на части из Lazarus вполне можно, хотя не факт, что просто.
hinst писал(а):я так понимаю, сервер отвечает на запросы клиента строкой, полученной в результате работы функции PHP serialize. Если я правильно понял, и это так... То вот это нонсэнс. Можете смело пояснить разработчикам, что так не делается, т.к. это абсолютно левый формат.
Насчет левого формата - вопрос. Они это считают стандартом - вместо того, чтобы добавлять поля в таблицу, запихивают в блоб массив...
Добавлено спустя 47 секунд:
Nik писал(а):Понятно, попробую "сдернуть" содержимое в поток (и в файл), вдруг повезет? А если там бинарник?
Насколько я помню, serialize() возвращает особым образом оформленный текст с разделителями. Разобрать его на части из Lazarus вполне можно, хотя не факт, что просто.
Попробую. Отпишусь обязательно.
Добавлено спустя 2 минуты 29 секунд:
hinst писал(а):я так понимаю, сервер отвечает на запросы клиента строкой, полученной в результате работы функции PHP serialize. Если я правильно понял, и это так... То вот это нонсэнс. Можете смело пояснить разработчикам, что так не делается, т.к. это абсолютно левый формат.
Правильно понимаете. Только разработчикам пояснять что-то невместно! Пошлют.
По поводу сериализации.. Как и указывали уважаемые форумчане, не так страшен чорт, как его малюют. На поверку массив оказался текстом, оформленным в ряд блоков, разделенных символами { }. Стринговое значение указано как s:3:"num";s:1:"2" - т.е. переменная длиной 3 символа с именем "num" имеет значение длиной 1 символ "2". Интовое значение имеет формат i:300 без указания длины. Кому это надо и кто это выдержит - не берусь судить, но, говорят, что в PHP это чуть ли не стандартная функция и все ее пользуют...
а что собственно в таком формате страшного? 
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Формат, может, и не самый красивый с точки зрения Pascal-программистов, но в PHP такая сериализация используется повсеместно (удобно именованные массивы записывать в БД одной строкой и обратно их дёргать).
Кстати, о птичках... Встречал как-то набор сторонних модулей, реализующих возможности именованных массивов в Delphi. Не встречал ли кто чего-нибудь похожего для Lazarus?
Кстати, о птичках... Встречал как-то набор сторонних модулей, реализующих возможности именованных массивов в Delphi. Не встречал ли кто чего-нибудь похожего для Lazarus?
Nik писал(а):Формат, может, и не самый красивый с точки зрения Pascal-программистов, но в PHP такая сериализация используется повсеместно (удобно именованные массивы записывать в БД одной строкой и обратно их дёргать).
Кстати, о птичках... Встречал как-то набор сторонних модулей, реализующих возможности именованных массивов в Delphi. Не встречал ли кто чего-нибудь похожего для Lazarus?
Отправьте это г-ну hinst... Он оценит!
