我正在尝试解码通过 PHP 中 Flash 的套接字发送的对象。我尝试使用 AMFPHP 和 ZEND_AMF,但都没有奏效。
有人可以指出我在不使用 AMFPHP 的远程功能的情况下在 php 中解码 AMF3 编码对象的方式吗?数据是通过套接字发送的,所以我不能像通常 amfphp 那样使用远程对象。
我正在尝试解码通过 PHP 中 Flash 的套接字发送的对象。我尝试使用 AMFPHP 和 ZEND_AMF,但都没有奏效。
有人可以指出我在不使用 AMFPHP 的远程功能的情况下在 php 中解码 AMF3 编码对象的方式吗?数据是通过套接字发送的,所以我不能像通常 amfphp 那样使用远程对象。
@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***************/
您可以使用SabreAMF在 PHP 上编码/解码 AMF 数据。
请看一下这个 - https://github.com/neoxic/php-amf3 - 这是一个非常可靠的 PHP 扩展,用于编码/解码 AMF3 流。