$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
html' target='_blank'>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);//關閉?>
在thinkphp中的應用;
//保存頭像 public function saveAvatar(){ $filename = intval($_GET['id']).'.jpg'; $xmlstr = $GLOBALS['HTTP_RAW_POST_DATA']; if(empty($xmlstr)) { $xmlstr = file_get_contents('php://input'); } if(!$xmlstr){ exit( '沒有接收到數據流.' ); } $jpg = $xmlstr;//得到post過來的二進制原始數據 $file = fopen("./Public/Uploads/AVATAR/".$filename,"w");//打開文件準備寫入 www.it165.net fwrite($file,$jpg);//寫入 fclose($file);//關閉 }PHP編程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答