浅谈PHP接收POST数据方式


Posted in PHP onJune 05, 2015

通常情况下用户使用浏览器网页表单向服务器post提交数据,我们使用PHP接收用户POST到服务器的数据,并进行适当的处理。但有些情况下,如用户使用客户端软件向服务端php程序发送post数据,而不能用$_POST来识别,那又该如何处理呢?

$_POST方式接收数据

$_POST方式是通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量。如使用$_POST['name']就可以接收到网页表单以及网页异步方式post过来的数据,即$_POST只能接收文档类型为Content-Type: application/x-www-form-urlencoded提交的数据。

$GLOBALS['HTTP_RAW_POST_DATA']方式接收数据

如果用过post过来的数据不是PHP能够识别的文档类型,比如 text/xml 或者 soap 等等,我们可以用$GLOBALS['HTTP_RAW_POST_DATA']来接收。$HTTP_RAW_POST_DATA 变量包含有原始的POST数据。此变量仅在碰到未识别MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于enctype="multipart/form-data" 表单数据不可用。也就是说使用$HTTP_RAW_POST_DATA无法接收网页表单post过来的数据。

php://input方式接收数据

如果访问原始 POST 数据的更好方法是 php://input。php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的php.ini设置,而php://input不能用于 enctype="multipart/form-data"。

例如,用户使用某个客户端应用程序post给服务器一个文件,文件的内容我们不管它,但是我们要把这个文件完整的保存在服务器上,我们可以使用如下代码:

$input = file_get_contents('php://input'); 
file_put_contents($original, $input); //$original为服务器上的文件

以上代码使用file_get_contents('php://input')接收post数据,然后将数据写入$original文件中,其实可以理解为从客户端上传了一个文件到服务器上,此类应用非常多,尤其是我们PHP开发要与C,C++等应用程序开发进行产品联合开发时会用到。

以下是一个小示例,演示了$_POST,$GLOBALS['HTTP_RAW_POST_DATA']和php://input三种不同方式的接收POST数据处理:

a.html

<form name="demo_form" action="post.php" method="post"> 
  <p><label>Name: </label><input type="text" class="input" name="name"></p> 
  <p><label>Address: </label><input type="text" class="input" name="address"></p> 
  <p><input type="submit" name="submit" class="btn" value="Submit"></p> 
</form>

post.php

header("Content-type:text/html;charset=utf-8"); 
 
echo '$_POST接收:<br/>'; 
print_r($_POST); 
echo '<hr/>'; 
 
echo '$GLOBALS[\'HTTP_RAW_POST_DATA\']接收:<br/>'; 
print_r($GLOBALS['HTTP_RAW_POST_DATA']); 
echo '<hr/>'; 
 
echo 'php://input接收:<br/>'; 
$data = file_get_contents('php://input'); 
print_r(urldecode($data));

以上所述就是本文的全部内容了,希望大家能够对php接收post数据的3种方式能够有所了解。

PHP 相关文章推荐
PHP+MYSQL的文章管理系统(二)
Oct 09 PHP
基于mysql的bbs设计(二)
Oct 09 PHP
PR值查询 | PageRank 查询
Dec 20 PHP
php debug 安装技巧
Apr 30 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
PHP页面中文乱码分析
Oct 29 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP操作MySQL事务实例
Nov 05 PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 PHP
php编程每天必学之验证码
Mar 03 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 PHP
php显示时间常用方法小结
Jun 05 #PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 #PHP
一个完整的PHP类包含的七种语法说明
Jun 04 #PHP
php循环table实现一行两列显示的方法
Jun 04 #PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 #PHP
了解PHP的返回引用和局部静态变量
Jun 04 #PHP
PHP中4种常用的抓取网络数据方法
Jun 04 #PHP
You might like
转换中文日期的PHP程序
2006/10/09 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
php面向对象重点知识分享
2019/09/27 PHP
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
Python中的高级数据结构详解
2015/03/27 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
护士见习期自我鉴定
2014/02/08 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
社团活动总结
2014/04/28 职场文书
体育运动口号
2014/06/09 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书