2011-03-22 94 views
0

當試圖通過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

回答

2
$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

0

嘗試分崩離析你的整個過程 - 如果它不工作,開始剝離掉的東西,你得到儘可能SQL插入之前...

首先,打開螢火蟲或Chrome/Safari瀏覽器的控制檯和日誌傳遞給你的PHP頁面數據 - 那麼也許剛開始看到什麼東西被傳遞:

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

如果您打開控制檯,它應該記錄回聲就是這樣。