浅谈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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
解析php中memcache的应用
Jun 18 PHP
php限制ip地址范围的方法
Mar 31 PHP
从wamp到xampp的升级之路
Apr 08 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
iis 7下安装laravel 5.4环境的方法教程
Jun 14 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
js实现碰撞检测
2021/01/29 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
理解Python中的With语句
2015/02/02 Python
Python性能优化技巧
2015/03/09 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
浅谈react路由传参的几种方式
2021/03/23 Javascript
办公室文秘自我鉴定
2013/09/21 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电