Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中解码AMF3中编码的AS3对象_Php_Actionscript 3_Apache Flex_Amf_Amfphp - Fatal编程技术网

如何在PHP中解码AMF3中编码的AS3对象

如何在PHP中解码AMF3中编码的AS3对象,php,actionscript-3,apache-flex,amf,amfphp,Php,Actionscript 3,Apache Flex,Amf,Amfphp,我试图在PHP中解码通过套接字从Flash发送的对象。 我试着使用AMFPHP和ZEND_AMF,但两者都不起作用 有人能告诉我在不使用AMFPHP的远程功能的情况下在php中解码AMF3编码对象的方法吗? 数据是通过套接字发送的,所以我不能像通常amfphp那样使用远程对象。您可以使用它在PHP上编码/解码AMF数据。@Ivan Dyachenko感谢您指向SabreAMF 下面是我成功解码和映射从Flex/Flash on sockets接收的AMF3编码对象的方法 include_once

我试图在PHP中解码通过套接字从Flash发送的对象。 我试着使用AMFPHP和ZEND_AMF,但两者都不起作用

有人能告诉我在不使用AMFPHP的远程功能的情况下在php中解码AMF3编码对象的方法吗?
数据是通过套接字发送的,所以我不能像通常amfphp那样使用远程对象。

您可以使用它在PHP上编码/解码AMF数据。

@Ivan Dyachenko感谢您指向SabreAMF 下面是我成功解码和映射从Flex/Flash on sockets接收的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***************/

请看一下--这是一个非常可靠的用于编码/解码AMF3流的PHP扩展。

我正在尝试使用SabreAMF,下面是代码“$data=$\u POST['data'”;包括“SabreAMF/Server.php”$服务器=新的SabreAMF_服务器($data);foreach($server->getRequests()as$request){$server->setResponse($request['response'],SabreAMF_Const::R_RESULT,$request['data']//任何数据结构,在本例中我们回显原始数据);}echo$server->sendResponse()我收到以下错误:致命错误:未捕获异常“exception”,消息“Buffer underrun at position:6”。正在尝试获取/var/www/html/sockets/SabreAMF/InputStream.php:56中的15653字节