浅谈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 程序员的调试技术小结
Nov 15 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
浅谈php命令行用法
Feb 04 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
PHP大文件切割上传功能实例分析
Jul 01 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去除HTML标签实例
2013/11/06 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
Python中的tuple元组详细介绍
2015/02/02 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
python动态规划算法实例详解
2020/11/22 Python
香港交友网站:be2香港
2018/07/22 全球购物
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
房地产推广策划方案
2014/05/19 职场文书
2015年党性分析材料
2014/12/19 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python