amfphp的使用

amfphp的两种方式
//as方式
var ro_login:RemoteObject;
ro_login = new RemoteObject();
ro_login.source = "User";
ro_login.destination = "用户相关操作";//可选参数
ro_login.endpoint = "http://localhost/amfphp/gateway.php";
ro_login.login.addEventListener("result", resultHandler);//RemoteObject是动态类,可以动态添加属性,这里login就是User.php里类User的login方法。
ro_login.login.addEventListener("fault", onFault);
 
//MXML方式
<mx:RemoteObject
        id="service_user"
        destination="获取用户服务.."
        endpoint="{'http://localhost/amfphp/gateway.php'}"
        source="User" >
    <mx:method name="login" result="resultHandler(event)"
     fault="mx.controls.Alert.show(event.fault.faultString)"/>
</mx:RemoteObject>
 
注意:如果amfphp端返回值形式为:return $list,则直接使用ResultEvent(data).result接收;
 
如果以return array('list'=>$list)返回,则使用ResultEvent(data).result.list接收
 
1.php接口文件名必须和类名相同
例如:paint.php中的类必须用class paint{…} 
2.php接口文件放置在amfphp/services/下即可通过Flex调用
PS:可以在amfphp/browser/index.html调试接口
PPS:可以在globals.php更改$servicesPath
 
3.如果接口返回中文字符的话,需要在amfphp/gateway.php的line127 设置对应的字符串编码
例如:$gateway->setCharsetHandler(”utf8_decode”, “UTF-8″, “UTF-8″); [string mode][string phpCharset][string sqlCharset]
 
第一个参数是设定要使用何种方式来重新编码传输的数据,如果是php5的话则可以放使用iconv,这是内建的模块。
 
第二个参数是设定系统预定的文字编码方式,如果要用中文的话就改成 utf-8。
 
第三个参数是设定该如何处理sql query result,也就是recordset的文字编码,同样的要用中文请设定成 utf-8。
 
 
 
4.php接口中全局变量的问题(连续2次问题都因此)
amfphp在调用php接口时是把这个接口文件include到amfphp本身的类里,所以include的时候就会出现在函数里global声明的变量获取不到,需要改成在声明该全局变量时就声明该变量global
 
详见http://cn2.php.net/manual/en/language.variables.scope.php#63500
 
5.如果加载大数据失败的话,可以调整amfphp/gateway.php的line151,把20调的更大些
比如$gateway->enableGzipCompression(200*1024);
 
6.gateway类的service方法会输出自己的header,如果对应的services也输出header信息的话可能会在ie7下报错。(bug#1076)
 
7、{"room":1, "table":1, "seat":1} 在amfphp/browser/里传递数组参数时,使用前面这种格式
 
8、只能接收return值,不能接收echo print_r等的输出值
 
 

AMFPHP 1.9新版问题修改

1、Flash环境下访问方法失败,而自带调试SWF正常,修改amfphp\gateway.php如下内容:

        if(PRODUCTION_SERVER)
        {
                //Disable profiling, remote tracing, and service browser
                $gateway->disableDebug();
                // Keep the Flash/Flex IDE player from connecting to the gateway. Used for security to stop remote connections. 
                //$gateway->disableStandalonePlayer();
        }

2、访问ByteArray对象出错,修改amfphp\core\amf\io\AMFSerializer.php如下内容:

        function writeAmf3ByteArray($d)
        {
                $this->writeByte(0x0C);
                //$this->writeAmf3String($d, true);
                $this->writeAmf3ByteArrayBody($d);
        }

另需要在写PHP代码时,将AMFPHP的AMF设置为AMF3,Flash设置无效的,代码为$GLOBALS['amfphp']['encoding'] = 'amf3';
或修改amfphp\core\shared\app\Globals.php内容中的$amfphp['encoding'] = "amf0";为$amfphp['encoding'] = "amf3";

原文地址:https://www.cnblogs.com/keng333/p/2400327.html