Канал.Безопасность.Ошибка…Ошибка #2048

#apache-flex #flex4.5

#apache-flex #flex4.5

Вопрос:

Недавно я обновился до Flash Builder 4.5 для PHP и пытаюсь загрузить сборку релиза на свой удаленный сервер. Когда я пытаюсь выполнить вызов php из приложения, я получаю сообщение об ошибке:

 Send failednChannel.Security.Error error Error #2048 url: 'http://localhost/my_php/public/gateway.php'
 

Сборка выпуска отлично работает на моем локальном компьютере. Все мои вызовы службы php находятся на моем удаленном хосте. Вот структура моего удаленного хоста:

 /my_directory/html (this is the root directory)
/my_directory/html/my_php/public/release  (this is where my .html wrapper and .swf files sit)
/my_directory/html/my_php/public (this is where my gateway.php and amf_config.ini files sit)
 

Ошибка конкретно ссылается на ‘localhost’, но я не могу найти, где это устанавливается. Когда я гуглю ошибку # 2048, решения указывают на плохо настроенный междоменный файл…все мои службы находятся на удаленном хостинге (где размещено приложение), поэтому я не думаю, что это может быть проблемой.

Вот мой файл amf_config.ini:

 [zend]
webroot = "/my_directory/html"

zend_path ="/my_directory/html/ZendFramework/library"
library ="/my_directory/html/my_php/library"
services ="/my_directory/html/my_php/services"

[zendamf]
amf.production = false
amf.directories[]=/my_directory/html/my_php/services
 

Вот мой gateway.php файл:

 <?php
ini_set("display_errors", 1);
$dir = dirname(__FILE__);
$webroot = $_SERVER['DOCUMENT_ROOT'];
$configfile = "$dir/amf_config.ini";
$servicesdir = $dir.'/../services';
$librarydir = $dir.'/../library';
//default zend install directory
$zenddir = $webroot.'/ZendFramework/library';
//Load ini file and locate zend directory
if (file_exists($configfile)) {
$arr = parse_ini_file($configfile, true);
if (isset($arr['zend']['webroot'])) {
    $webroot = $arr['zend']['webroot'];
    $zenddir = $webroot.'/ZendFramework/library';
}
if (isset($arr['zend']['zend_path'])) {
    $zenddir = $arr['zend']['zend_path'];
}
if (isset($arr['zend']['library'])) {
    $librarydir = $arr['zend']['library'];
}
if (isset($arr['zend']['services'])) {
    $servicesdir = $arr['zend']['services'];
}
}
// Setup include path
// add zend directory, library and services to include path
set_include_path(get_include_path()
.PATH_SEPARATOR.$zenddir
.PATH_SEPARATOR.$librarydir
.PATH_SEPARATOR.$servicesdir);
// Initialize Zend Framework loader
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true)->suppressNotFoundWarnings(true);
// Load configuration
$default_config = new Zend_Config(array("production" => false), true);
$default_config->merge(new Zend_Config_Ini($configfile, 'zendamf'));
$default_config->setReadOnly();
$amf = $default_config->amf;
// Store configuration in the registry
Zend_Registry::set("amf-config", $amf);
// Initialize AMF Server
$server = new Zend_Amf_Server();
$server->setProduction($amf->production);
if (isset($amf->directories)) {
$dirs = $amf->directories->toArray();
foreach ($dirs as $dir) {
    if ($dir == "./") {
        $server->addDirectory($webroot);
    } else 
        if (realpath("{$webroot}/{$dir}")) {
            $server->addDirectory("{$webroot}/{$dir}");
        } else 
            if (realpath($dir)) {
                $server->addDirectory(realpath($dir));
            }
}
}
// Initialize introspector for non-production
if (! $amf->production) {
$server->setClass('Zend_Amf_Adobe_Introspector', '', 
array("config" => $default_config, "server" => $server));
$server->setClass('Zend_Amf_Adobe_DbInspector', '', 
array("config" => $default_config, "server" => $server));
}
// Handle request
echo $server->handle();
 

Комментарии:

1. как ни странно, сообщение об ошибке ссылается на » localhost/my_php/public/gateway.php » но в моем шлюзе или конфигурационном файле amf нет ссылки на «localhost»

2. Как вы вызываете эту службу в своем приложении Flex? Каковы endpoint source destination свойства вашего RemoteObject? Также, что произойдет, если вы откроете gateway.php в вашем браузере? Согласно сообщению об ошибке, похоже, что проблема в том, что Flex вызывает Localhost..

3. да, gateway.php не возвращает ошибок, когда я пытаюсь загрузить его непосредственно в браузере. Кажется, я не могу найти, где ‘localhost’ указывается в php или приложении

Ответ №1:

у меня была такая же проблема в среде flex — blaze. Реальной проблемой был контекстный корень в свойствах проекта. поскольку вы использовали flex 4.5, для этого параметра нет поля ввода. в flex builder 3 была настройка в свойствах проекта -> flex server -> context root.

я сошел с ума и после нескольких часов работы нашел статью об ошибках на сайте adobes [FB-22939].

Это решает мою проблему. Я понятия не имею, какие настройки проекта вы используете, попробуйте выполнить поиск в строке с именем {context.root} в вашем проекте или опубликовать немного больше о настройках вашего проекта. я знаю, что blaze отличается от php, но, возможно, это подсказка, возвращающая вас на правильный путь.

К сожалению, я не могу воспроизвести свой поток и настроить среду php с помощью дополнительных знаний о вашей настройке. (Серверная технология и так одна)

редактировать: дополнительная информация: я нашел список всех аргументов компилятора. Попробуйте с этим аргументом:

 -context-root <context-path>
    full name -compiler.context-root
    path to replace {context.root} tokens for service channel endpoints
 

br
Фрэнк