Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Flex版本生成安全沙盒冲突错误#2048_Php_Apache Flex_Zend Framework_Zend Amf - Fatal编程技术网

Php Flex版本生成安全沙盒冲突错误#2048

Php Flex版本生成安全沙盒冲突错误#2048,php,apache-flex,zend-framework,zend-amf,Php,Apache Flex,Zend Framework,Zend Amf,我正在使用Flex和PHP,使用ZendAMF协议开发一个web应用程序。从昨天开始,每当我将应用程序发布到远程服务器时,就会出现这个奇怪的问题。 在本地,一切都很好,只有当我在服务器上发布它时。以下是我收到的错误信息: Send failed Channel.Security.Error error Error #2048: Security sandbox violation: http://mydomain.com/login/MainFrame.swf cannot load data

我正在使用Flex和PHP,使用ZendAMF协议开发一个web应用程序。从昨天开始,每当我将应用程序发布到远程服务器时,就会出现这个奇怪的问题。 在本地,一切都很好,只有当我在服务器上发布它时。以下是我收到的错误信息:

Send failed
Channel.Security.Error error Error #2048: Security sandbox violation: http://mydomain.com/login/MainFrame.swf cannot load data from http://localhost/bin-debug/gateway.php. url: 'http://localhost/bin-debug/gateway.php'
我很确定我的gateway.php和amf_配置文件没有什么问题,因为我知道它们略有不同。(我使用的这些文件来自一个备份位置,在那里一切正常)

此外,我还将我的crossdomain.xml复制到web根目录和应用程序目录中,它会自动进入其中。内容如下:

<cross-domain-policy>
    <allow-access-from domain="*" />
</cross-domain-policy>

问题是,在生产版本中,它仍然试图访问本地文件。我已经试着搜索了很多关于这个问题的信息,但是没有找到与我的案例相同的信息

gateway.php源代码部分

<?php
ini_set("display_errors", 1);
$dir = dirname(__FILE__);
$webroot = $_SERVER['DOCUMENT_ROOT'];
$configfile = "$dir/amf_config.ini";

//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'];
    }
}

http://mydomain.com/
需要
http://localhost/

在这种情况下,您的
http://localhost/crossdomain.xml
应允许来自
http://mydomain.com/


只需确保您的crossdomain.xml正常

我想您了解错误所在——远程服务器正在尝试访问本地主机;这可能行不通。您是否在代码的某个地方硬编码localhost引用?还是在配置文件中?我认为如果没有代码检查,我们无法提供更多帮助。不,在项目设置->Flex Server中,应用程序中没有使用的harcoded url,其中我的webroot设置为/Applications/MAMP/htdocs,Root url设置为。我不确定Flash Builder中的Flex Server设置做了什么。不过,我不希望它改变您的代码。您是否正在将服务配置编译到主文件中?许多AMF实现使用外部配置文件方法。我会在那里查找硬编码的“localhost”引用。您还可以查看引用的任何外部库。您在哪里指定AMF端点?调用RemoteObject的代码是什么?我将尝试以另一种方式询问。请共享RemoteObject调用背后的Flex代码,以便我了解如何指定RemoteObject的目标和端点。您共享的代码是服务器端代码,但您共享的所有代码都指向Flex代码中的错误。正如我所说,从
http://localhost
。部署之后,它仍然指向localhost,在这里它只能指向web服务器(
http://mydomain
)只要看看你发布的错误消息,问题就在那里描述了,你有两个域,现在你告诉我你没有问题,但是你的域(根据错误)正在尝试从本地主机获取信息-这似乎是错误的我必须-1此。“localhost”是一个指向本地服务器的特殊域。除非应用程序的每个客户端都有自己的服务器在运行;在生产应用程序中使用localhost是不实际的。除此之外,你只是在重复“dotne和我在评论中所做的对话”。不管你认为什么是正确的,错误信息都是在说真话,而事实是第一个域连接到第二个域,并且有一个丢失的交叉域。file@Rodislav虽然错误是跨域问题,您通常会按照回答中的说明进行修复。然而,真正的问题是他的SWF试图在端点“localhost”找到PHP服务器。因为SWF已经部署到服务器上,所以它不应该使用“localhost”URL来访问服务器。当SWF和服务器URL相同时,将不会出现跨域问题——因此使用crossdomain.xml修复它是毫无意义的;)