PHP中使用php://input处理相同name值的表单数据


Posted in PHP onFebruary 03, 2015

在去年10月份,我在博客中分析了php接收前台name值相同的表单提交数据的处理的问题,当时说的方案是为把name值改成数组类型,php接收到之后,再对数组进行合并处理。这样做的缺点就是不完全兼容前台表单,用户必须要对表单作出更改,而系统需求是所有升级对用户完全透明,所以说这种方式还是不够完美。

经过差不多一年时间的沉淀,发现php提供原始的访问输入/输出流的方法,POST的数据可以通过php://input来获取:

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 php://input 是无效的。

php://input 打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI 的实现,请求体数据被保存的时候, 它可以打开另一个 php://input 数据流并重新读取。 通常情况下,这种情况只是针对 POST 请求,而不是其他请求方式,比如 PUT 或者 PROPFIND。

所以用php获取相同name值的表单数据的思路可以是这样,1,通过php://input获取原始的POST数据; 2,对数据进行处理合并; 3, 重新把处理过的值赋给系统变量$_POST; 下面是定义的一个函数:

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来获取处理之后各个表单的数据。

PHP 相关文章推荐
PHP安全编程之加密功能
Oct 09 PHP
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
PHP实现时间轴函数代码
Oct 08 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
PHP预定义接口――Iterator用法示例
Jun 05 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 #PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 #PHP
php上传中文文件名乱码问题处理方案
Feb 03 #PHP
php上传文件常见问题总结
Feb 03 #PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 #PHP
php对象在内存中的存在形式分析
Feb 03 #PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 #PHP
You might like
德劲1103二次变频版的打磨
2021/03/02 无线电
PHP Socket 编程
2010/04/09 PHP
浅析php学习的路线图
2013/07/10 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
django 信号调度机制详解
2019/07/19 Python
Pycharm修改python路径过程图解
2020/05/22 Python
基于python实现查询ip地址来源
2020/06/02 Python
直接有效的自我评价
2014/01/11 职场文书
房地产营销策划方案
2014/02/08 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
差生评语大全
2014/05/04 职场文书
学校政风行风整改方案
2014/10/25 职场文书
新年祝酒词大全
2015/08/11 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL