Отправка 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";
}
Если у вас есть открытая консоль, она должна записать эхо на это.