PHP中使用php://input處理相同name值的表單數(shù)據(jù)
在去年10月份,我在博客中分析了php接收前臺name值相同的表單提交數(shù)據(jù)的處理的問題,當時說的方案是為把name值改成數(shù)組類型,php接收到之后,再對數(shù)組進行合并處理。這樣做的缺點就是不完全兼容前臺表單,用戶必須要對表單作出更改,而系統(tǒng)需求是所有升級對用戶完全透明,所以說這種方式還是不夠完美。
經(jīng)過差不多一年時間的沉淀,發(fā)現(xiàn)php提供原始的訪問輸入/輸出流的方法,POST的數(shù)據(jù)可以通過php://input來獲取:
php://input 是個可以訪問請求的原始數(shù)據(jù)的只讀流。 POST 請求的情況下,最好使用 php://input 來代替 $HTTP_RAW_POST_DATA,因為它不依賴于特定的 php.ini 指令。 而且,這樣的情況下 $HTTP_RAW_POST_DATA 默認沒有填充, 比激活 always_populate_raw_post_data 潛在需要更少的內(nèi)存。 enctype=”multipart/form-data” 的時候 php://input 是無效的。
php://input 打開的數(shù)據(jù)流只能讀取一次; 數(shù)據(jù)流不支持 seek 操作。 不過,依賴于 SAPI 的實現(xiàn),請求體數(shù)據(jù)被保存的時候, 它可以打開另一個 php://input 數(shù)據(jù)流并重新讀取。 通常情況下,這種情況只是針對 POST 請求,而不是其他請求方式,比如 PUT 或者 PROPFIND。
所以用php獲取相同name值的表單數(shù)據(jù)的思路可以是這樣,1,通過php://input獲取原始的POST數(shù)據(jù); 2,對數(shù)據(jù)進行處理合并; 3, 重新把處理過的值賦給系統(tǒng)變量$_POST; 下面是定義的一個函數(shù):
function GET_SUBMIT(){
if(empty($_POST)) return $_POST;
//判斷提交類型
if($_SERVER["HTTP_CONTENT_TYPE"] != 'application/x-www-form-urlencoded'){
return $_POST;
}
//獲取POST原始值
$data= file_get_contents("php://input");
if(empty($data)) return $_POST;
//開始處理
$POST=array();
$list=explode('&',$data);
foreach($list as $key=>$value){
//獲取POST的KEY和Value值
$postname=urldecode(substr($value,0, stripos($value,"=")));
$postvalue=urldecode(substr($value,(stripos($value,"=")+1)));
//對KEY值和Value值進行處理
//去空格和[]
$postname=trim($postname,' ,[,]');
$postvalue=trim($postvalue);
if(array_key_exists($postname,$POST)){
$POST[$postname]=$POST[$postname]." ,".$postvalue;
}else{
$POST[$postname]=$postvalue;
}
}
return $POST;
}
接下來只要在需要的地方使用”$_POST=GET_SUBMIT()”, 后面就可以通過$_POST來獲取處理之后各個表單的數(shù)據(jù)。
相關(guān)文章
PHP結(jié)合vue導出excel出現(xiàn)亂碼的解決方法分享
這篇文章主要為大家詳細介紹了PHP結(jié)合vue導出excel出現(xiàn)亂碼的解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-02-02
php實現(xiàn)利用phpexcel導出數(shù)據(jù)
以下是對php中利用phpexcel導出數(shù)據(jù)的實現(xiàn)代碼進行了介紹,需要的朋友可以過來參考下2013-08-08
PHP數(shù)組無限分級數(shù)據(jù)的層級化處理代碼
在很多朋友寫無限級分類數(shù)據(jù)時都直接使用遞歸來操作,下面我來介紹一下關(guān)于PHP無限分級代碼優(yōu)化方法,有需要的朋友可參考一下2012-12-12
php基于 swoole 實現(xiàn)的異步處理任務功能示例
這篇文章主要介紹了php基于 swoole 實現(xiàn)的異步處理任務功能,涉及swoole的安裝、配置及php調(diào)用swoole守護進程監(jiān)控任務相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-08-08
屏蔽機器人從你的網(wǎng)站搜取email地址的php代碼
屏蔽機器人從你的網(wǎng)站搜取email地址然后發(fā)垃圾郵件的處理方法,需要的朋友可以參考下2012-11-11
PHP中break及continue兩個流程控制指令區(qū)別分析
php中常用的for與foreach循環(huán)中,經(jīng)常遇到條件判斷或中止循環(huán)的情況。而處理方式主要用到break及continue兩個流程控制指令,現(xiàn)在說明主要區(qū)別2011-04-04

