Отправка ByteArray через as3 в PHP - PullRequest
0 голосов
/ 22 марта 2011

Поле BLOB (рис.) Становится равным 0 байтам при попытке отправить ByteArray через as3 в PHP, поэтому я предполагаю, что скрипт 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);
?>

Ответы [ 2 ]

2 голосов
/ 22 марта 2011
$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.)

0 голосов
/ 22 марта 2011

Попробуйте разбить на части весь ваш процесс - если он не работает, начните убирать вещи, прежде чем вы доберетесь до SQL-вставки ...

Прежде всего, откройте консоль firebug или chrome / safari и войдите в систему.данные передаются на вашу php-страницу - тогда, возможно, просто начните видеть то, что передается:

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

Если у вас открытая консоль, она должна записать эхо на это.

...