Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загадка Flash - PHP Serializer Class, не правильно работает unserialize (http://www.flasher.ru/forum/showthread.php?t=186623)

КорДум 06.11.2012 19:28

Код-то какой неаккуратный.
При первом взгляде в serialize надо бы поменять блоки проверки на Array и Object местами.

rolling_kz 06.11.2012 19:29

так исторически сложилось, отправляем постом сериализированную строку, в ответ то же получаем сериализированную строку.
в итоге очень легко передавать любые структуры данных.

rolling_kz 06.11.2012 19:30

Цитата:

Сообщение от КорДум (Сообщение 1103070)
Код-то какой неаккуратный.
При первом взгляде в serialize надо бы поменять блоки проверки на Array и Object местами.

- в каких строках?

КорДум 06.11.2012 19:32

Цитата:

- в каких строках?
В строках метода serialize, где идет проверка на Object и Array. Нужно оба этих блока поменять местами.

rolling_kz 06.11.2012 19:33

Цитата:

Сообщение от AlexCooper (Сообщение 1103073)
В вложении скинул Вам рабочею версию AMFPHP.
Серверные скрипты размещать в amfphp/Amfphp/service

на стороне сервера используем Zend Amf

КорДум 06.11.2012 19:33

Код AS3:

} else if(data is Object){
        for(key in data){
                tmp.push(Serializer.serialize(key));
                tmp.push(Serializer.serialize(data[key]));
                i += 1;
        }
        s = "O:8:\"stdClass\":" + i + ":{" + tmp.join("") + "}";
} else if(data is Array){
        for(key in data){
                tmp.push(Serializer.serialize(i))
                tmp.push(Serializer.serialize(data[key]))
                i += 1
        }
        s = "a:"+i+":{"+ tmp.join("") + "}";


AlexCooper 06.11.2012 19:38

Цитата:

Сообщение от rolling_kz (Сообщение 1103078)
на стороне сервера используем Zend Amf

Дело Ваше.

rolling_kz 06.11.2012 19:38

из case "a": переставил в case "O" и наоборот - не работает

КорДум 06.11.2012 19:44

Ну вообще-то надо целиком блоки менять. И в том методе нет кейсов вообще. Там только ифы.
Не уверен, что это как-то вам поможет, конечно, но по логике это будет правильно. Иначе массив никогда не сериализуется.

rolling_kz 06.11.2012 19:49

Цитата:

Сообщение от КорДум (Сообщение 1103079)
Код AS3:

} else if(data is Object){
        for(key in data){
                tmp.push(Serializer.serialize(key));
                tmp.push(Serializer.serialize(data[key]));
                i += 1;
        }
        s = "O:8:\"stdClass\":" + i + ":{" + tmp.join("") + "}";
} else if(data is Array){
        for(key in data){
                tmp.push(Serializer.serialize(i))
                tmp.push(Serializer.serialize(data[key]))
                i += 1
        }
        s = "a:"+i+":{"+ tmp.join("") + "}";


так не помогло,
сериализируется и так отлично. такой массив php без ошибки десериализует.
а вот во флаше-то я его обратно десериализвать не могу.


Часовой пояс GMT +4, время: 07:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.