通过as3发送ByteArray到PHP

问题描述:

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

我认为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); 
?> 
+0

您似乎忘记告诉我们发生了什么问题,以及到目前为止采取了哪些故障排除步骤。 – Charles 2011-03-22 15:06:14

+0

糟糕。 BLOB字段(pic)变成0字节,所以我假设P​​HP脚本或HTTP_RAW_POST_DATA不起作用。 – Ugleh 2011-03-22 15:09:04

$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阵列)

+0

非常感谢!这工作:) – Ugleh 2011-03-22 15:23:39

尝试分崩离析你的整个过程 - 如果它不工作,开始剥离掉的东西,你得到尽可能SQL插入之前...

首先,打开萤火虫或Chrome/Safari浏览器的控制台和日志传递给你的PHP页面数据 - 那么也许刚开始看到什么东西被传递:

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

如果您打开控制台,它应该记录回声就是这样。