浅谈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 相关文章推荐
第八节 访问方式 [8]
Oct 09 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php中的登陆login实例代码
Jun 20 PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP 图片处理
Sep 16 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 cli配置文件问题分析
2015/10/15 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JS交换变量的方法
2015/01/21 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
vue.js表格分页示例
2016/10/18 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
人力资源经理的岗位职责
2014/03/02 职场文书
法制演讲稿
2014/09/10 职场文书
三方股东合作协议书
2014/10/28 职场文书
安全保证书格式
2015/02/28 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
可可西里观后感
2015/06/08 职场文书
教师节获奖感言
2015/07/31 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书