浅谈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 clearstatcache()函数详解
Mar 02 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
destoon实现底部添加你是第几位访问者的方法
Jul 15 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
php实现mysql连接池效果实现代码
Jan 25 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 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生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
Python元组知识点总结
2019/02/18 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
新闻记者个人求职的自我评价
2013/11/28 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
毕业生自荐信格式
2014/03/07 职场文书
银行办公室岗位职责
2014/03/10 职场文书
就业协议书范本
2014/04/11 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
PHP遍历数组的6种方式总结
2021/11/17 PHP