AMFPHP issue referencing ByteArray

Recently I made some test in AMFPHP sending an retrieving ByteArray to be stored in a mysql blob field.

But suddenly I encounter a problem when I was trying to return an array of ByteArrays and I could not find out the reason flash continued to show me this error:

The php file which was generating this error was:

class Service
{
public function getArray( )
{
$GLOBALS['amfphp']['encoding'] = 'amf3';
$a = new ByteArray("\x00\x10this is a string");
$b = new ByteArray("\x00\x16this is another string");
$c = $a;
return array( $a, $b, $c );
}
}

While the Actionscript test class was:

package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
import flash.utils.ByteArray;

public class test extends Sprite
{
private var nc: NetConnection;
private var rsp: Responder;

public function test()
{
rsp = new Responder( onResult, null );
nc = new NetConnection();
nc.objectEncoding = ObjectEncoding.AMF3;
nc.connect( "http://localhost/amfphp/trunk/gateway.php" );
nc.call( "test.bytearray.Service.getArray", rsp );
}

private function onResult( e: * ): void
{
if ( e is Array )
{
for each ( var b: ByteArray in( e as Array ) )
{
trace( 'reading bytearray...' );
b.position = 0;
trace( b.readUTF() );
}
}
}
}
}


After some investigation I found that the error was into the AMFSerializer.php file in the writeAmf3ByteArray method which doesn’t reference correctly the bytearray objects.

Thus I made a little modification and after that I succeeded to retrieve correctly the bytearray list ( with the 3rd element as reference of the first one ).

Here you can download the patch file, if you want to test the modification ( at your own risk 🙂 ). The patch has been created using the last svn version of amfphp and you can apply the patch with the following command:
patch -p0 -i bytearray.patch

NetConnection Debugger Alternates

Today I’ve started a new Flash project which will also involve Flash Remoting.
So I decided to try this ServiceCapture tools for debugging the amf messages as replacement of the builtin NetConnection debugger.
I’m really suck of the flash NetConnection Debugger (it works 50% of the times for me). Sometimes I need to close and re-open it in order to make it works again, sometimes it doesnt display anything at all…
Btw, ServiceCapture can capture every kind of HTTP traffic, not only remoting calls and it has also a bandwidth simulation feature. (and these are cool features)
However the full license costs $34.99, which is not so cheap for this kind of tool.
http://kevinlangdon.com/serviceCapture/

AMFPHP & NetConnection Call.BadVersion

If you used at least one time AMFPHP you probably had already encountered the NetConnection Call.BadVersion message.
This seems to be a very common issue for anyone who’s beginnig to develop with Flash Remoting in PHP. In fact I often read message from guys who had this this error while trying to use AMFPHP remoting.
The reasons of this error are often the same or at least similar, for this reason I thought to create a page on the wiki space about this problem.
This is a list of all the common situation where the Call.BadVersion appears. I get most of the poits reading people’s posts and I hope you will contribute to create the most comprehensive list about this common problem.

Other useful resources about AMFPHP:
AMFPHP installation guide
Flash-DB tutorial
Installation tips on amfphp.org

Link: http://www.sephiroth.it/phpwiki/index.php/Call.BadVersion