将数组从Flash传递到PHP

4

我遇到了一个问题,就是无法从Flash(AS2)传递数组变量到PHP。在ActionScript中,我定义了几个数组,像这样:

output["px1"]
output["px2"]
output["px3"]

然后我使用以下代码将变量传递到一个php文件中。
output.sendAndLoad("orders/print2cart.php",output,"POST");

我想知道如何从PHP数组中获取数据。 我尝试使用$_POST ['px1']$_POST ['output'] ['px1']$_POST ['output'],但似乎无法获取任何数据。 有什么建议可以帮助我得到所需的结果吗?

谢谢!

编辑:刚注意到输出(output)中的另一个变量(output.username)也没有被发送到PHP,尽管它在flash中显示出来。使用以下代码警报到flash,并显示所有变量。 getURL(“javascript:alert('Print Stamp:“+ output.PrintStamp +” User:“+ output.username“')”);

编辑:似乎一旦我发送了相当长的数组(或字符串),与LoadVars变量相关联的其他字段也不会被发送。 我通过谷歌搜索限制发现文本限制约为~63000。但仍不确定是否是问题的原因。


使用print_rvar_dump打印$_POST变量;如果数据能够正常传递,这将向您展示它的位置。如果没有出现在那里,请尝试查看$_GET变量,以防它实际上并没有执行POST操作。 - El Yobo
@El Yobo:尝试使用 $_GET,但没有得到任何值。 - Farax
你是否检查过服务器日志以确保Flash实际上正在进行HTTP请求?你也可以使用诸如HTTPFox Firefox扩展或Fiddler这样的代理工具,来观察请求流量并检查内容。这应该足够让你有所了解。 - Paul Dixon
保罗,问题似乎出在巨大的数组上,实际上这个数组是图像的像素。一旦我将数组放入loadVar变量中,就没有任何内容传输到PHP文件中。经过大量的谷歌搜索,我发现了几种传递大型数组的其他方法,包括序列化器类、amfPHP等。但我希望有一个更简单的解决方案? - Farax
3个回答

3

尝试将其作为字符串。

在Flash中使用Array.join();,发送返回值,然后在PHP中使用explode()将其转换回数组。

var dataOut:LoadVars = new LoadVars();
var dataIn:LoadVars = new LoadVars();

dataOut.info = your_array.join("#");

vars.sendAndLoad("url", dataIn, "post");

dataIn.onLoad = function(go:Boolean):Void
{
    if(go)
    {
        trace('success');
    }
    else trace('connection failed');
}

PHP:

<?php
    $str = $_POST["info"];
    $myarray = explode($str);
?>

将代码更改为以下内容,但它没有起作用: code output.PrintStamp = PrintStamp; output.username = curUser; output.abc = output["px100"].join("#"); output.sendAndLoad("orders/print2cart.php",output,"POST"); code

在PHP中

$File = "YourFile.txt"; $Handle = fopen($File, 'w'); $Data = sizeof($_POST['abc']); fwrite($Handle, $Data); fclose($Handle);
- Farax

1

您可以像处理HTML一样,通过将参数命名为"array[0]"、"array[1]"等来执行相同的操作:

    var urlVariable:URLVariables = new URLVariables();
    urlVariable["phpArray[0]"] = "arrayEntry0";
    urlVariable["phpArray[1]"] = "arrayEntry1";

    var loader:URLLoader = new URLLoader();
    var request:URLRequest = new URLRequest("http://yourserver.com/phpScript.php");
    request.method = URLRequestMethod.POST;
    request.data = urlVariable;

    loader.load(request);

然后在服务器端,您可以通过 PHP 脚本验证接收到的结果:

    print_r($_POST);

它应该输出:

    Array
    (
        [phpArray] => Array
            (
                [0] => arrayEntry0
                [1] => arrayEntry1
            )
    )

对于多维数组,你可以使用:

    urlVariable["phpArray[0][0]"] 

1

由于没有其他选择,而且在最终得出结论之前我经历了很多事情,即大型数组不能很容易地从AS2传递到PHP。我的数组实际上是一个转换为像素的图像,所以我将数组分成两个部分,并将其两次发布到PHP文件中,而不是只发布一次。另一种选择是先将数组拆分并发布到文本文件中,然后直接从PHP读取该文本文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接