0

尝试通过 as3 将 ByteArray 发送到 PHP 时,BLOB 字段(图片)结果为 0 字节,因此我假设 PHP 脚本或 HTTP_RAW_POST_DATA 不起作用。

我认为 Flash 部分正在工作,我设置了一个trace()来查看位图数据是否正在通过,并且看起来是这样,所以我假设它是我的 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);
?>
4

2 回答 2

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

这应该适合你。这将访问PHP 的原始输入流。显然,在某些情况下它更有可能起作用:

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数组引用它时,它的魔法才有效。)

于 2011-03-22T15:20:51.970 回答
0

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

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

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

如果您打开了控制台,它应该记录回声。

于 2011-03-22T15:23:11.440 回答