Отправка ByteArray через as3 в PHP

Поле 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 ответа

Решение
$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 массив).

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

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

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

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

Другие вопросы по тегам