浅谈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 相关文章推荐
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php session安全问题分析
Jun 24 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php计算title标题相似比的方法
Jul 29 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
May 28 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 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
typecho插件编写教程(五):核心代码
2015/05/28 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
js实现楼层导航功能
2017/02/23 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
Python3爬楼梯算法示例
2019/03/04 Python
详解python多线程之间的同步(一)
2019/04/03 Python
深入浅析Python中的迭代器
2019/06/04 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
JPA的特点
2014/10/25 面试题
初中物理教学反思
2014/01/14 职场文书
学校安全工作制度
2014/01/19 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
土建技术员岗位职责
2015/04/11 职场文书
小学运动会前导词
2015/07/20 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
Promise静态四兄弟实现示例详解
2022/07/07 Javascript