-
PHP AS3 communication
Hi all !
I have been wracking my brains over this seemingly simple code & issue but cannot get it to work. The code snippet, invokes a php file using URLLoader & passing 2 variables to php. The simple php file grabs a swf file, base64 encodes it and sends it back to AS3.
Code:
stop();
var rs:String ="";
var len:int = 0;
var bytes:ByteArray = new ByteArray();
var variables:URLVariables = new URLVariables();
var varSend:URLRequest = new URLRequest("comm_1.php");
varSend.method = URLRequestMethod.POST;
varSend.data = variables;
var varLoader:URLLoader = new URLLoader;
varLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
variables.uname = "Guest";
variables.lname = "Newbie";
variables.sendRequest = "parse";
varLoader.load(varSend);
varLoader.addEventListener(Event.COMPLETE,completeHandler);
function completeHandler(event:Event):void
{
// SECTION 1
//==========
rs = event.target.data.returnString;
len = rs.length;
msg1.text = rs+' - '+len;
// rs = "Q1dTCHAKAAB4nIVWa1RTVxbe94YbEl4CJiYg0KDCRFAQBCEd0PAQRR7lrTgCCRAExARDRLCd8WpRsSKFAlGstoro8BRGRNEZhCAJz64C4ixdylQs2hG1ZawL7VIncy6U9sqfuWvlZp/v7L3vt7+z9lk7D4gkAHY3gAkGgRaAngBcr9evY+iRWRgEhhCgyFIoN6fLZFlJO1MgR6XIBv/dKpVCTi0V8gilLCcHklJ2K5UyuSpNKd0pg+0KlcJPnhpN+WZnSfNBbQxM+PVhgY0aBxYWxXsPxX9D8bkFo5hFbeHLQQm/owbhagIMMbQRbHkaBxdQm4EhjpYzmAHGIuZlnv0eM4pXicPyGW/s/3ojHh+BnvMXhGCQ6ubz0s1nKnWNT/UanzMYZn7tkWE5UgZJpHfS60GfgEz9PkC61SFIP6qnTGoX46AEg8iw8Pysrf60l71NWCcWeh94SyailS5i+LKcZLcVu6wXPpxwF2Mhy4A1bhNVbNEJqeUkM1iJDD3bnJIAsTjEZGLoD8RorWe7MgAYIIQjFIoD/8XnQjGUMgkMtK9+fPPqxqnkniCfc/0wBz4omgrqOqtN9P1c+IKcA/+ePna5C3/yzooOFnp32+jaXM49Sen3OTMHbhg590S3p7fbhgZq3lm9W2xlmZI7TAvXJPomruP/+ZaGnrM9paonVLLftSN3ltIxCiwYoGqhEb/RcX5fqCTDdSCXRrxL16W7yU8N+Gaclq/L1c71A/7DkOIxGqgb3ZHpqZP2fkvnqKt4temNrmK6laCD0r5VE7rRzIoBOuhdZhPc5Wo79Iie08rCpLBLpxH50UFmGSP4RkcVqZvlWUSBqJhOMMnfUE53ahfL9tFPYSadRuSv09DTUR/WDD12taWDFEWt8/FMz/nFaDONN72hg1TZ2q9EqyZo4IxAPNt/7HKgq0ZJyfuy292eBs6InqSe8lDTj6aPqoZ2NO3iZHKQ5jV71CI/UcD8fJqhR0M/zP+y1lldMTCfozbTqJWYX432K+9vbebXre2Rf391vkLax1M/583XUvuL/O1VmuqHKXC2DoAOJh+9HTHUN9aPpYbk+xebnuNHXQiQ7ay9ZuVzOCLb9WCdVd4hCeo5H7RRmYa62eHsJxmGFdWh0NuL3SllVwL8QSTr7lxYRtqqp05mA1ZCdSkDZYEO8EBRBKTDwmbAWahxBysrwdy09g7DUcLu6zQbyAvzBujrH3GE1FR4trFgkISFpy49AL1lAeptJhAY00+ZIc1Cphnch8vYWvwmzmbsYJibapRb23+8vEAVIzgak0pERh7l+p8DImQFEK2tnEZjH3BsFeBvd4a5hfcPjy7Nj+2wq+Tfz0ho/KOs2ywqdnNcEVhmREACJpa2Bj4/eETaGevghXkMQVwDCdwHx2OdlQn46hd7zpGCupfO6rvhi+qT29x7SLxuGkwd7Z12RcYAa7IEDiAiDUHYPwPIffXoVyhYklnCP8z2fl63LKABCHkNLGyJtHBvDAwcAPv+BiioEoJzrQA8EpqNXiY0KRTxZQZIEt0vQfE/SZqsYzxvvf50qyieed17vwRingLkMA6GnPAi/hMf47I+AszCvnsbOlSDGC412ltqcN74i9fPah3WhqhyjVvXTpo+vBMdyp0YdB4d7GrnkUT0KuDXltxOjgsAYksULB2/WFN+clJ102N3EDF0NGOM63t8A69Hkj3GIdmNpzxl28ZHN8cAZ1iAHWfLRNmlCm3fAfwHYQOnPh8fuffpZL18wcUTC4zkw4eAnVwCZcc0F6vvWz+KgOVJgMVL+j+aLuDwMkvGLoCB2aPrgOrSnIyNrwEnQUP9Z1WXLi6bHp0sa4k+IQHnkAgwYSU7DbKkJDhsbQaH+rVBa5p8mSuuiMGpuhMaj2XVtbS2RDc4NYY3AxxrMOfZPNnKFYP24P0MLm9X9RIkzxESEu7uilTKOiGcEGO+1qLj3HT1toQzEJtLYlVBpXFHrMXglsZCTMb/VO//MSd/5Cbn6yedd5tlQd9oCjcCVzQEwqjbcRFVtwELuE1ioSefuayPvXN1uAg4fYCFt3I9bkaG1yY8/KuXzK89JRGfsKwrroHFr/92TFlRNPr1Azg/CQTX10nYMAlsvAYcnm5p2XpS63nWHOr+SzLiTA40bnGTgLTIHJHoFQD2rMarMT1ca6Vq8lzvuzdQdLv87MotdUC4AnhVO3xXFvzFhdMpIT6w/IqYsZpTl+Mm/j5sU0eh6UYwUj9PI1GWx27O/h9H7h82txNuiwEjoeH+a9591b1BEUkWhZ1Y8CEwLsvfY3jA3qlLU32JhAsFYOyrqW2597Nqu1HudNqL2A+bLoxLoOqnxXuvO9+78m9bI+69T1yeGgz27Ki9bgcQDVJQQDaaOFSwz3IdUJ0oxnesoWaDf/kz8LG1lMVBVrM7gN06yrJdM4dxf7Py5qx1iwJnksz0ssBfkZUKXbUC91WrvAUx6TJBmEKuUOVnywQBCmW2QilVZSjkLgK/rCxBVMb2dFWOIEqWI1PmylJdQI/bU3MLSNgr0/nFr4FhVIzGltWDg9hLjDDaubx/pcmH0SR0WJrMuEXMjTQo8IOZyUbCXpHHL33wXqABChxJvmX+axiLHsYWojcbTRczowcB1LCBo8yLzhjyxWiBpi4WLGoybJu9XalZx9EABVjzdIm0GZHa/R9yOWqh";
// SECTION 2
// =========
var decoder:Base64Decoder = new Base64Decoder();
decoder.decode(rs);
var bytes:ByteArray = decoder.toByteArray();
trace(bytes);
trace(len);
}
IF I comment out section 2 of the code ( the decoding part), I can see that the string is passed just fine and displayed in a text box by
Code:
msg1.text = rs+' - '+len;
All well till here. I have pasted the actual value of string, in commented out rs string, in the code for comparison/checking purpose.
So the value of rs received from php and the value in commented out rs string are same.
Now if I un-comment section 2, which tries to base64 decode the string back, I immediately get the following error:
Error
at Base64Decoder/flush()
at Base64Decoder/toByteArray()
at AS3_swf_php_comm_1_fla::MainTimeline/completeHandler()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunctio n()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader: nComplete()
The php code is as below:
PHP Code:
if($_POST[‘sendRequest’] ===“parse”){
var_dump($_POST);
$uname = $_POST[‘uname’];
$lname = $_POST[‘lname’];
$p = file_get_contents(‘dummy.swf’);
$p = base64_encode($p);
echo “&returnString=”.$p;
exit;
}
I have been trying to figure this out for a long time without success. Please someone enlighten me what am I doing wrong and what is it that I need to do to get this working.
Thanks to all !!
-
Client Software Programmer
I use this script for as2/as3 to encode/decode directly in flash so no php involved, you call the last 2 functions in this script to encode or decode the string:
PHP Code:
function Encode(str){
return encodeBase64(str);
}
function Decode(str){
trace(decodeBase64(str));
}
function StringReplaceAll(source, find, replacement){
return source.split(find).join(replacement);
}
var _EndOfInput = -1;
var _Chars:Array = new Array(
'A','B','C','D','E','F','G','H',
'I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X',
'Y','Z','a','b','c','d','e','f',
'g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v',
'w','x','y','z','0','1','2','3',
'4','5','6','7','8','9','+','/'
);
var _CharsReverseLookup:Array; // = new Array();
var _CharsReverseLookupInited:Boolean = InitReverseChars();
var _Digits = new Array( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' );
var _base64Str:String;
var _base64Count:Number;
function InitReverseChars(){
_CharsReverseLookup = new Array();
for (var i=0; i < _Chars.length;i++){
_CharsReverseLookup[ _Chars[i] ] = i;
}
return true;
}
function UrlDecode(str){
str = StringReplaceAll( str, "\+", " " );
str = unescape( str );
return str;
}
function UrlEncode(str){
str = escape( str );
str = StringReplaceAll( str, "\+", "%2B" );
str = StringReplaceAll( str, "%20", "+" );
return str;
}
function setBase64Str(str){
_base64Str = str;
_base64Count = 0;
}
function readBase64(){
if(!_base64Str){
return _EndOfInput;
}
if(_base64Count >= _base64Str.length){
return _EndOfInput;
}
var c:Number = _base64Str.charCodeAt(_base64Count) & 0xff;
_base64Count++;
return c;
}
function encodeBase64(str){
setBase64Str(str);
var result = "";
var inBuffer = new Array(3);
var lineCount = 0;
var done = false;
while(!done && (inBuffer[0] = readBase64() ) != _EndOfInput ){
trace(done);
inBuffer[1] = readBase64();
inBuffer[2] = readBase64();
result += ( _Chars[ inBuffer[0] >> 2 ]);
if( inBuffer[1] != _EndOfInput ){
result += ( _Chars[ ( ( inBuffer[0] << 4) & 0x30) | (inBuffer[1] >> 4) ] );
if( inBuffer[ 2 ] != _EndOfInput ){
result += ( _Chars[ ( ( inBuffer[ 1 ] << 2) & 0x3c) | ( inBuffer[ 2 ] >> 6)] );
result += ( _Chars[ inBuffer[ 2 ] & 0x3F ]);
}else{
result += ( _Chars[((inBuffer[ 1 ] << 2) & 0x3c)]);
result += ("=");
done = true;
}
}else{
result += ( _Chars[ ( ( inBuffer[0] << 4 ) & 0x30 ) ] );
result += "=";
result += "=";
done = true;
}
trace(result)
lineCount += 4;
if(lineCount >= 76){
result += ('\n');
lineCount = 0;
}
}
return result;
}
function readReverseBase64(){
if(!_base64Str){
return _EndOfInput;
}
while(true){
if( _base64Count >= _base64Str.length ){
return _EndOfInput;
}
var nextCharacter:String = _base64Str.charAt(_base64Count);
_base64Count++;
if(_CharsReverseLookup[nextCharacter]){
return _CharsReverseLookup[nextCharacter];
}
if(nextCharacter == 'A'){
return 0;
}
}
return _EndOfInput;
}
function ntos(n){
var str:String = n.toString(16);
if(str.length == 1) str = "0" + str;
str = "%" + str;
return unescape(str);
}
function decodeBase64(str){
setBase64Str(str);
var result:String = "";
var inBuffer:Array = new Array(4);
var done:Boolean = false;
while(!done && (inBuffer[0] = readReverseBase64()) != _EndOfInput && ( inBuffer[1] = readReverseBase64()) != _EndOfInput){
inBuffer[ 2 ] = readReverseBase64();
inBuffer[ 3 ] = readReverseBase64();
result += ntos( ( ( ( inBuffer[ 0 ] << 2 ) & 0xff ) | inBuffer[ 1 ] >> 4 ) );
if( inBuffer[ 2 ] != _EndOfInput ){
result += ntos( ( ( ( inBuffer[ 1 ] << 4 ) & 0xff ) | inBuffer[ 2 ] >> 2 ) );
if(inBuffer[3] != _EndOfInput){
result += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3]));
}else{
done = true;
}
}else{
done = true;
}
}
return result;
}
function toHex(n){
var result:String = "";
var start = true;
for( var i:Number=32; i>0;){
i-=4;
var digit = (n>>i) & 0xf;
if(!start || digit != 0){
start = false;
result += _Digits[digit];
}
}
return ( result=="" ? "0" : result );
}
function pad(str, len, pad){
var result:String = str;
for (var i=str.length; i<len; i++){
result = pad + result;
}
return result;
}
function encodeHex(str){
var result:String = "";
for( var i:Number=0; i<str.length; i++){
result += pad( toHex( str.charCodeAt( i ) & 0xff ), 2, '0');
}
return result;
}
function decodeHex(str){
var result = "";
var nextchar = "";
for( var i=0; i<str.length; i++ ){
nextchar += str.charAt(i);
if(nextchar.length == 2){
result += ntos( parseInt("0x" + nextchar));
nextchar = "";
}
}
return result;
}
trace(encodeBase64("hey"))
trace(decodeBase64("aGV5"))
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|