![]() |
Загадка Flash - PHP Serializer Class, не правильно работает unserialize
Здраствуйте,
Для передачи данных между PHP и Flex мы приспособились использовать сериализированные объекты. Очень удобно. На стороне PHP - serialize/unserialize - стандартные функции. А в AS3 используем класс некоего Alessandro Crugnola: http://sourceforge.net/projects/serializerclass/ Но вот недавно обнаружили толи баг то ли фичу: После выполнения: Код AS3:
Код AS3:
В случае простого линейного объекта все работает. При этом ясно что косячит именно unserialize. т.к. tmpStr иммет правильный вид: Код AS3:
Может кто-нибудь помочь. По моему в коде класса сериализатора баг. Алгорит класса Serializer достаточно сложный, не могу сам найти где там поправить. Спасибо |
может спросить у Alessandro Crugnola?
я лично вижу странность, что перед пропертей bbb в tmpStr нет ни запятой, ни точки с запятой. Хотя может это формат такой. |
Код старый, автор вряд ли ответит.
Что касается запятой, то для меня этот формат пока загадка. Принци его понять не могу. |
Так сериализуются пхп-объекты. О - обджект, а - массив, s - строка и так далее.
http://php.net/manual/ru/function.serialize.php |
Да формат примерно понятный, но странный
Цитата:
8 - пока не понял, по идее размер. stdClass - класс 2 - кол-во полей s - строка 3 - размер ее "ааа" - название поля i - integer |
8 - длина значения или ключа. В данном случае ключа.
2 - длина строки ключа 11 - значение числа (вроде как) |
Спасибо за ссылку, по ней я понял насколько сложный формат.
А почему класс не пашет? как только ассоциативный массив внутри глючить начинает. |
Это нужно спросить у создателя. А вообще, если глючит, проще посидеть часок и наваять свой алгоритм десериализации конечными автоматами. И сериализации, тщательно изучив формат. Там не так много объектов, чтобы пугаться.
|
у создателя спросил - молчит.
я не совсем гуру. уйдет очень много времени. спросил вдруг в в этом алгоритме кто-то заметит где ошибка: Код AS3:
|
Вложений: 1
почему вы не используете amfphp?
объявление соединения Код AS3:
Код AS3:
Код AS3:
Серверные скрипты размещать в amfphp/Amfphp/service PHP код:
|
Код-то какой неаккуратный.
При первом взгляде в serialize надо бы поменять блоки проверки на Array и Object местами. |
так исторически сложилось, отправляем постом сериализированную строку, в ответ то же получаем сериализированную строку.
в итоге очень легко передавать любые структуры данных. |
Цитата:
|
Цитата:
|
Цитата:
|
Код AS3:
|
Цитата:
|
из case "a": переставил в case "O" и наоборот - не работает
|
Ну вообще-то надо целиком блоки менять. И в том методе нет кейсов вообще. Там только ифы.
Не уверен, что это как-то вам поможет, конечно, но по логике это будет правильно. Иначе массив никогда не сериализуется. |
Цитата:
сериализируется и так отлично. такой массив php без ошибки десериализует. а вот во флаше-то я его обратно десериализвать не могу. |
У вас не будет сериализовать отлично, если там будет массив. Понятно? Только и всего. Конкретно по проблеме пытаюсь помочь. Пишу десериализатор на скорую руку.
|
понятно, черт с ним с массивом. не используем.
Добавлено через 3 минуты хотя вот: Код AS3:
Код AS3:
|
А должен быть массив.
|
но как только два массива:
Код AS3:
Код AS3:
Код AS3:
я понял про что Вы говорите. да пусть станет объектом, хотя согласен коряво написано. Добавлено через 2 минуты главная проблема только один объект или массив пропускает. |
А почему обычный ДЖСон не устроил? Я не вижу типизированных объектов.
|
Да на самом деле. Я вот щас десериализатор пишу и меня уже задолбало. То ли бошк из-за недосыпа не варит. В любом случае, это такой геморрой. А JSON явно тут был бы к месту. Тем более, есть нативная поддержка, что на пхп, что на ас3.
|
PHP код:
O:3:"foo":2:{s:3:"aaa";a:3:{i:0;i:0;i:1;i:1;i:2;i:2;}s:3:"bbb";a:3:{i:0;i:0;i:1;i:1;i:2;i:2;}} Цитата:
|
Цитата:
а в остальном не вижу преимуществ JSON. |
о ходу весь класс кривой. и сериализатор и обратно
Добавлено через 1 минуту Цитата:
|
так и этот работает.
много лет юзаем. только вот обна бага попалась. до этого с php только плоские объекты посылали типа: Код AS3:
а вот из флаша туда многосложные объекты отправляем все без багов. |
Цитата:
Код AS3:
Цитата:
SE|PY помните? Тот, что для AS2. Это его рук дело. Я только его и пользовал во времена TimeZero. |
да кстати он ответил, не могу говорит помоч, давно это было, as3 давно не использует.
SE|PY - классный редактор был. ну пустяковый баг пока не решается. замена array на object не помогает. |
Зачем вам использовать кукую-то библиотеку, которая не работает и не поддерживается.
Мы раньше тоже использовали разные странности вроде ZendAMF. И даже все работало. Но вдруг на каком-то "особенном" объекте вылетала бага. Как уже советовали, используйте JSON. Если хотите получить защиту от кулхакеров с Charles, то лучше написать свое шифратор-дешифратор |
| Часовой пояс GMT +4, время: 07:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.