通过as3将ByteArray发送到PHP

时间:2011-03-22 14:33:04

标签: php flash actionscript-3 bytearray bitmapdata

当尝试通过as3将ByteArray发送到PHP时,BLOB字段(pic)变为0字节,所以我假设P​​HP脚本或HTTP_RAW_POST_DATA不起作用。

我认为Flash部分正在运行,我设置了一个trace()来查看bitmapdata是否正在通过它似乎是,所以我假设它是我的php端。我将发布代码的两个部分,希望有人可以帮我修复它。感谢。

AS3

    private function export():void
    {
        var bmd:BitmapData = new BitmapData(600, 290);
        bmd.draw(board);
        var ba:ByteArray = PNGEncoder.encode(bmd);
        trace(ba);
        var _request:URLRequest = new URLRequest ("http://site.com/readimage.php");
        var loader: URLLoader = new URLLoader();
        _request.contentType = "application/octet-stream";
        _request.method = URLRequestMethod.POST;
        _request.data = ba;
        loader.load(_request);
    }

PHP

    <?php
$username = "images";
$password = "password";
$host = "localhost";
$database = "images";

$link = mysql_connect($host, $username, $password);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db ($database);

$query ="INSERT INTO main (pic) VALUES ('".$GLOBALS["HTTP_RAW_POST_DATA"]."')" or die(mysql_error());
$results = mysql_query($query, $link);
?>

2 个答案:

答案 0 :(得分:2)

$blob = file_get_contents('php://input');

这对你有用。这会访问PHP's raw input stream。在某些情况下,它更有可能起作用,显然:

  

php://input允许您从请求正文中读取原始数据。在POST请求的情况下,它优先于$HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充$HTTP_RAW_POST_DATA的情况,它可能是激活always_populate_raw_post_data的内存密集型替代方案。

您还需要确保在将数据放入数据库时​​正确转义此数据:

$query = "INSERT INTO main (pic) VALUES ('" . mysql_real_escape_string($blob) . "')";

$HTTP_RAW_POST_DATA的魔法也可能仅在您直接引用而不是通过$GLOBALS数组时才有效。)

答案 1 :(得分:0)

尝试分解你的整个过程 - 如果它不起作用,在你获得sql插入之前开始剥离东西...

首先,打开firebug或chrome / safari控制台并记录您的数据传递到您的php页面 - 然后可能只是开始看到正在传递的内容:

foreach (getallheaders() as $name => $value) {
    echo "$name: $value\n";
}

如果您打开控制台,它应该将回显记录到该控制台。