$GLOBALS['HTTP_RAW_POST_DATA']
最近在做Flash在線裁剪圖片 生成圖片的東西。
通過Flash POST 圖片的二進制數據給php,由php生成圖片保存。
開始想到用$_POST來接受。后來發現行不通。
查閱了很多資料 明白了所以然,這里做一個筆記:
於PHP默認只識別application/x-www.form-urlencoded標准的數據類型。
因此,對型如text/xml 或者 soap 或者 application/octet-stream 之類的內容無法解析,如果用$_POST數組來接收就會失敗!
故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA'] 來接收。
另外還有一項 php://input 也可以實現此這個功能
php://input 允許讀取 POST 的原始數據。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 php.ini 設置。php://input和 $HTTP_RAW_POST_DATA 不能用於 enctype="multipart/form-data"。
我在Flash中使用JPGEncoder把BitMapData轉成二進制,然后post給php
php頁面代碼如下:
<?php
$filename="teststream.jpg";//要生成的圖片名字
$xmlstr = $GLOBALS[HTTP_RAW_POST_DATA];
if(empty($xmlstr)) $xmlstr = file_get_contents('php://input');
$jpg = $xmlstr;//得到post過來的二進制原始數據
$file = fopen("cache/pic/".$filename,"w");//打開文件准備寫入
fwrite($file,$jpg);//寫入
fclose($file);//關閉
?>