ZendAMF возвращает неверный XML и вызывает ошибку BadVersion при вызове метода из Flash - PullRequest
0 голосов
/ 01 сентября 2010

Я пытаюсь использовать ZendAMF для выполнения удаленных вызовов методов для базы данных MySQL из Flash и продолжаю получать ошибку NetConnection.Call.BadVersion.

Мой сервер работает правильно.Apache 2.2.14

Мой PHP работает правильно.PHP 5.2.11

Моя база данных работает.MySQL 5.0

ОБНОВЛЕНИЕ: моей первой проблемой была ошибка безопасности во Flash.Если вы попытаетесь запустить локальный SWF-файл из Flash IDE для веб-службы в Интернете, вы получите предупреждение системы безопасности, которое вызовет ошибку BadVersion.Тем не менее, ошибка безопасности не будет отображаться, если вы 'ТЕСТ ФИЛЬМ', поэтому мне потребовалось некоторое время, чтобы понять это.Я изменил процесс тестирования, чтобы удалить эту переменную.Теперь я могу успешно реализовать свой код класса php, используя AMFPHP, который, по сути, исключает мой класс как проблему (я думаю).Кажется, это проблема с Zend-реализацией AMF.

Я ознакомился с руководством Ли Бримлоу: http://www.gotoandlearn.com/play.php?id=90.Мне не удалось заставить это работать локально, и я переместил свой контент на веб-сервер и могу вызывать класс и метод из моего SWF.Я использовал Чарльза, чтобы посмотреть ответ.Когда я проверяю ответ Чарльза, я получаю следующее:

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: (не закрывайте тег?>.)

<?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 ]

1 голос
/ 02 сентября 2010

Вы проверили свой код PHP?Ошибка NetConnection.Call.BadVersion является типичной ошибкой, если в вашем PHP-коде есть ошибка.Прежде чем отлаживать Flash, убедитесь, что ваш PHP-код работает и возвращает ожидаемые результаты.

1 голос
/ 02 сентября 2010

Ты готов к этому ?!В файле шлюза Zend Framework не должно быть пробела до открывающего тега PHP, иначе ответ AMF будет недействительным.

Моя единственная проблема заключалась в том, что у меня ничего не было в строке 1, а открывающий тег PHP в строке 2.

Это была проблема.Рабочий код ниже!

<?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;
?>
1 голос
/ 02 сентября 2010

работает ли соединение в автономном плеере? проверьте журналы вашего клиента и посмотрите ошибки, которые выбрасываются. IDE по-другому подключается к автономному серверу, и это может вызвать ошибку безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...