当从Flash调用方法时,ZendAMF返回无效的XML并导致BadVersion错误

时间:2010-09-01 18:27:59

标签: php xml flash zend-framework

我正在尝试使用ZendAMF从Flash远程方法调用MySQL数据库,并且我不断收到NetConnection.Call.BadVersion错误。

我的服务器工作正常。 Apache 2.2.14

我的PHP工作正常。 PHP 5.2.11

我的数据库正在运行。 MySQL 5.0

更新:我的第一个问题是Flash中的安全错误。如果您尝试从Flash IDE将本地SWF运行到Web服务,则会收到安全警告,该警告将引发BadVersion错误。但是,如果你'TEST MOVIE',安全错误就不会出现,所以我花了一段时间才意识到这一点。我改变了测试过程以删除此变量。我现在能够使用AMFPHP成功实现我的php类代码,这实际上排除了我的类作为问题(我认为)。这似乎是AMF的Zend实现的一个问题。

我在这里遵循了Lee Brimlow的教程:http://www.gotoandlearn.com/play.php?id=90。我无法让它在本地工作,我已将我的内容移到Web服务器上,可以从我的SWF调用Class和Method。我用Charles查看了回复。当我在Charles中验证响应时,我得到了这个:

Validator: Failed to Parse XML Document.
Reason: An invalid XML character (Unicode: 0x0) was found in the CDATA section.
Line: 65 Column: 87

任何想法如何解决这个问题?可以用PHP处理吗?

这是我的ZendAMF代码:

<?php

error_reporting(E_ALL|E_STRICT);
ini_set("display_errors", "on");
ini_set("include_path",  "./frameworks");
require_once 'Zend/Amf/Server.php';
require_once 'Animal.php';
$server = new Zend_Amf_Server();
$server->setClass("Animal");
$server->setProduction(false);
$response = $server->handle();
echo $response;

?>

这是我的PHP类代码:(注意没有结束?&gt;标记。)

<?php

class Animal
{
    public function __construct()
    {
        include "dbinfo.inc.php";
        $linkID = mysql_connect('localhost', $username, $password) or die("Could not connect to host.");
        mysql_select_db($database, $linkID) or die( "Unable to select database.");
    }

    public function getAnimalQuotes()
    {
        $result = mysql_query("SELECT * FROM AnimalQuotes");
        $t = array();
        while($row = mysql_fetch_assoc($result))
        {
            array_push($t, $row);
        }
        return $t;
    }
}

我已将我的Flash Player更新为10.1。 我正在将我的swf发布到Flash 10 / AS3。

当我运行SWF时,我仍然收到此错误。

Error #2044: Unhandled NetStatusEvent:. level=error, code=NetConnection.Call.BadVersion
at ZendAMF_fla::MainTimeline/frame1()

这是我的AS3代码:

import flash.net.*;
var nc:NetConnection = new NetConnection();
nc.connect("http://www.pbjs.com/2010/");
var res:Responder = new Responder(onResult, onFault);
nc.call("Animal.getAnimalQuotes", res);
function onResult(e:Object):void
{
    trace (e);
}
function onFault(e:Object):void
{
    for (var i in e){
        trace(e[i]);
    }
}

3 个答案:

答案 0 :(得分:1)

连接是否可以在独立播放器中运行?检查客户端的日志并查看引发的错误。 IDE以不同的方式连接到独立的,可能会引发安全性错误。

答案 1 :(得分:1)

你检查过你的PHP代码吗?如果您的PHP代码有错误,NetConnection.Call.BadVersion错误是一个典型的错误。在调试Flash端之前,请100%确定您的PHP代码是否正常工作并返回您期望的结果。

答案 2 :(得分:1)

你准备好了吗?!在打开PHP标记或AMF响应无效之前,Zend Framework网关文件不能有任何空格。

我唯一的问题是第1行没有任何内容,第2行也没有开放的PHP标记。

这就是问题所在。下面的工作代码!

<?php  // MAKE SURE THIS IS LINE 1

// Configurable values
// Debugging values
$debug = true;                             // Debugging status
if ($debug)
{
    // Report all errors, warnings, interoperability and compatibility
    error_reporting( E_ALL | E_STRICT );
    // Show errors with output
    ini_set( "display_errors" , "on");
}
else
{
    error_reporting(0);
    ini_set("display_errors", "off");
}

// Add the Zend AMF installation folder to PHP include path
ini_set( "include_path",  "./frameworks/library");

// Instantiate the Zend Amf server
require_once( "Zend/Amf/Server.php" );
require_once("Animal.php");

$server = new Zend_Amf_Server();
$server->setClass("Animal");

// Return the handle.
$response = $server->handle();
echo $response;
?>