浅谈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的memcache类分享(memcache队列)
Mar 26 PHP
php常见的魔术方法详解
Dec 25 PHP
PHP实现简单数字分页效果
Jul 26 PHP
windows下apache搭建php开发环境
Aug 27 PHP
php实现遍历多维数组的方法
Nov 25 PHP
PHP性能优化大全(php.ini)
May 20 PHP
php微信支付接口开发程序
Aug 02 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
PHP Primary script unknown 解决方法总结
Aug 22 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
开启PHP的伪静态模式
2015/12/31 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
js监听键盘事件示例代码
2013/07/26 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
用Python制作音乐海报
2021/01/26 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
为什么需要版本控制?
2013/08/08 面试题
文艺晚会策划方案
2014/06/11 职场文书
绘画专业自荐信
2014/07/04 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
教师求职自荐信范文
2015/03/04 职场文书
2015年教师节慰问信
2015/03/23 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
Mysql开启外网访问
2022/05/15 MySQL
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL