2011-11-02 20 views
5

Niedawno zaktualizowałem program Flash Builder 4.5 do PHP i próbuję przesłać kompilację wydania na mój serwer zdalny. Gdy próbuję wykonać połączenie php z aplikacji, pojawia się błąd:Channel.Security.Error ... Błąd nr 2048

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

Build uwolnienie działa dobrze na moim komputerze localhost. Wszystkie moje wywołania usługi php są na moim zdalnym hoście. Oto struktura mojego zdalnego hosta:

/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) 

Błąd odesłań „localhost”, ale nie mogę znaleźć gdzie to zostanie ustawiony. Kiedy błąd google nr 2048, rozwiązania wskazują na źle skonfigurowany plik crossdomain ... wszystkie moje usługi są na remotehost (gdzie jest hostowana aplikacja), więc nie sądzę, że może to być problem.

Oto moja amf_config.ini file:

[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 

Oto mój plik 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(); 
+0

dziwnie, odniesienia komunikat o błędzie „http: //localhost/my_php/public/gateway.php”, ale nie ma odniesienia do „localhost” w mój plik konfiguracyjny gateway lub amf –

+0

Jak wywołujesz tę usługę w swojej aplikacji Flex? Jakie są właściwości 'endpoint',' source', 'destination' twojego obiektu remoteObject? Co się stanie, jeśli otworzysz gateway.php w przeglądarce? Zgodnie z komunikatem o błędzie wydaje się, że problem polega na tym, że Flex wywołuje Localhost .. – sydd

+0

yeah, gateway.php nie zwraca błędów, gdy próbuję załadować go bezpośrednio w przeglądarce. Nie mogę znaleźć, gdzie "localhost" jest określony w php lub aplikacji –

Odpowiedz

0

Miałem ten sam problem w Flex - Blaze - środowisko. Prawdziwym problemem był kontekst-root we właściwościach projektu. ponieważ użyłeś flexu 4.5, dla tego ustawienia nie ma pola wejściowego. w Flex Builder 3 było ustawienie we właściwościach projektu -> flex server -> context root.

Poszedłem do szaleństwa i znalazłem po godzinach artykuł na temat błędów w serwisie adobes [FB-22939].

To rozwiązuje mój problem. Nie mam pojęcia, których ustawień projektu używasz, spróbuj wyszukać ciąg o nazwie {context.root} w swoim projekcie lub dodaj trochę więcej informacji o ustawieniach projektu. Wiem, że Blaze różni się od php, ale może jest to wskazówka, która przywróci cię na właściwe tory.

Niestety nie mogę odtworzyć mojego wątku i skonfigurować środowisko php z większą wiedzą na temat konfiguracji. (Server-Technology, i tak)

edycja: dodatkowe informacje: Znalazłem listę wszystkich argumentów kompilatora. Spróbuj z tym argumentem:

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

br Frankowi