1

PHP で Flash からソケット経由で送信されたオブジェクトをデコードしようとしています。AMFPHP と ZEND_AMF を使用してみましたが、どちらも機能しませんでした。

AMFPHP のリモート機能を使用せずに、PHP で AMF3 エンコードされたオブジェクトをデコードする方法を教えてもらえますか? データはソケット経由で送信されるため、通常は amfphp が機能するため、リモート オブジェクトを使用できません。

4

3 に答える 3

2

@Ivan Dyachenko SabreAMF を指摘してくれてありがとう。以下は、ソケットの Flex/Flash から受信した AMF3 エンコード オブジェクトを正常にデコードおよびマッピングした方法です。

include_once 'SabreAMF/AMF3/Serializer.php';
include_once 'SabreAMF/AMF3/Deserializer.php';
include_once 'SabreAMF/OutputStream.php';
include_once 'SabreAMF/InputStream.php';
include_once 'SabreAMF/TypedObject.php';
include_once 'SabreAMF/ClassMapper.php';

/************DECODER*****************/
SabreAMF_ClassMapper::registerClass('FLASH_CLASS_NAME','PHP_CLASS_NAME'); //CLASSES SHOULD BE SAME
$inputStream = new SabreAMF_InputStream($buffer);
$des = new SabreAMF_AMF3_Deserializer($inputStream);
$obj = $des->readAMFData();
//$obj will contain the instance of PHP_CLASS_NAME with the properties set as the values sent by Flex/Flash
/************END DECODER*****************/

/**************ENCODER******************/
$classObj = new PHP_CLASS(); //PHP_CLASS is your class
$object = new SabreAMF_TypedObject('FLASH_CLASS_NAME',$classObj); //FLASH_CLASS_NAME IS NAME OF CLASS AVAILABLE TO FLASH FOR MAPPING
$outputStream = new SabreAMF_OutputStream();
$serializer = new SabreAMF_AMF3_Serializer($outputStream);
$serializer->writeAMFData($object);
$output = $outputStream->getRawData();

//$output is AMF Encoded string to be sent to FLEX/FLASH. 
/***********END ENCODER***************/
于 2012-09-20T11:19:07.417 に答える
1

SabreAMFを使用して、PHP で AMF データをエンコード/デコードできます。

于 2012-09-17T14:30:02.933 に答える
0

これを見てください - https://github.com/neoxic/php-amf3 - これは、AMF3 ストリームをエンコード/デコードするための非常に信頼性の高い PHP 拡張機能です。

于 2012-12-29T05:32:13.630 に答える